Lucene иностранных символов - PullRequest
4 голосов
/ 21 июля 2009

У меня серьезные проблемы с использованием Zend_Lucene и иностранных символов, таких как åäö. Эти проблемы возникают как при создании индекса, так и при его запросе. Я пробовал и iso-8859-1, и utf-8.

ISO-8859-1

Запрос, который не работает, выглядит как "+_area:skåne". С Zend_Lucene я не получаю совпадений, но если я выполню этот запрос в Luke, я получу много соответствующих документов.

Указатель содержит 20 полей. Поле "_area" добавлено со следующим синтаксисом:

$doc->addField(Zend_Search_Lucene_Field::keyword('_area', strtolower($item['area']), 'iso-8859-1')); 

Я использую анализатор Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive.

Во время индексирования иногда появлялось сообщение об ошибке ниже (проиндексированные документы были случайно выбраны из БД с кодировкой iso-8859-1)

Примечание: iconv (): обнаружен недопустимый символ во входной строке в TextNum.php.

Это было «решено» путем проверки того, что вход $ this -> _ пуст, так как казалось, что это вызвало уведомления. Примечание: странные результаты запроса были ранее существовавшим условием.

Когда я выполняю поиск по ключевым словам с использованием иностранных символов, я получаю сообщение об ошибке выше, но при поиске в текстовых полях он ведет себя по-другому. Затем он генерирует около сотни ошибок ниже.

Примечание: неопределенное смещение: 1996 в \ Zend \ Search \ Lucene \ Search \ Query \ MultiTerm.php в строке 472

Но он производит то, что выглядит как правильный набор результатов! Кстати, этот второй запрос не приводит ни к каким результатам в Люке.

UTF-8

Я также пробовал UTF-8, потому что, насколько мне известно, Zend_Lucene использует его внутренне. Поскольку набор данных ISO-8859-1, я конвертирую его, используя utf8_encode. Но при индексации возникают следующие ошибки.

Примечание: неопределенное смещение: 266979 дюйм \ Zend \ Search \ Lucene \ Индекс \ SegmentInfo.php по линии 632

Примечание: попытка получить собственность не объект в \ Zend \ Search \ Lucene \ Индекс \ SegmentMerger.php по линии 196

Примечание: попытка получить собственность не объект в \ Zend \ Search \ Lucene \ Индекс \ SegmentMerger.php по линии 200

Примечание: неопределенный индекс: в \ Zend \ Search \ Lucene \ Индекс \ SegmentWriter.php по линии 231

Примечание: пытаясь получить собственность не объект в \ Zend \ Search \ Lucene \ Индекс \ SegmentWriter.php по линии 231

Примечание: неопределенное смещение: 250595 дюйма \ Zend \ Search \ Lucene \ Индекс \ SegmentInfo.php на линии 2020

Примечание: попытка получить собственность не объект в \ Zend \ Search \ Lucene \ Индекс \ SegmentInfo.php на линии 2020

Примечание: неопределенный индекс: в \ Zend \ Search \ Lucene \ Индекс \ SegmentWriter.php по линии 465 ...


Итак. Может кто-нибудь, пожалуйста, пролить свет? :) Я считаю (после нескольких дней поиска в Google), что я не единственный, кто испытывает это.

1 Ответ

1 голос
/ 21 июля 2009

Я предлагаю вам попробовать UTF-8-совместимый анализатор текста . Похоже, что используемый вами анализатор уничтожает не-ASCII символы. Вы должны убедиться, что текст введен правильно и что он достигает Lucene в правильном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...