Как вы ищите почтовые индексы, используя Zend Lucene? - PullRequest
2 голосов
/ 31 мая 2009

У меня есть очень простой индекс компании с Zend Lucene, использующим это для создания индекса:

// store company primary key to identify it in the search results
$doc->addField(Zend_Search_Lucene_Field::Keyword('pk', $this->getId()));

// index company fields
$doc->addField(Zend_Search_Lucene_Field::Unstored('zipcode', $this->getZipcode(), 'utf-8'));
$doc->addField(Zend_Search_Lucene_Field::Unstored('name', $this->getName(), 'utf-8'));

Я могу искать по названию компании, но не по почтовому индексу. Есть ли проблема с целочисленными индексами Zend Lucene Search? Если кто-то может пролить свет на опыт, пожалуйста, помогите мне. Я могу только представить, что использование Lucene для поиска по почтовому индексу довольно распространено.

Ответы [ 3 ]

3 голосов
/ 21 июля 2009

Я полагаю, что анализатор текста по умолчанию для Zend Lucene не ищет номера по умолчанию. Zend поставляется с несколькими различными анализаторами текста. Используйте анализатор TextNum для поиска как цифр, так и символов. В папке zend / search / lucene / analysis / analyzer / common есть несколько других анализаторов, которые могут оказаться полезными.

Вы можете изменить свой анализатор по умолчанию с помощью следующего кода:

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());
0 голосов
/ 05 апреля 2011

Если вы ищете 123, вы получите все хиты с 123, а также 34123, например. Таким образом, вы должны убедиться, что ваш индекс и строка запроса однозначна.

Я предлагаю индексировать почтовый индекс в виде строки, такой как «000123». После этого вы можете выполнить поиск по индексу с помощью «000123», и вы получите правильный набор результатов, а не 34123. Вам нужно только перевести почтовый индекс в «правильную» строку запроса.

0 голосов
/ 01 июня 2009

Я считаю, что ваша проблема с Анализатором . Я предлагаю вам использовать Zend_Search_Lucene_Field::Keyword, вместо Zend_Search_Lucene_Field::Unstored для поля почтового индекса. Таким образом, анализатор Lucene не будет изменять почтовый индекс при индексации. Java Lucene имеет объяснение () , которое может использоваться для отладки поиска. Возможно, вам придется распечатать некоторые промежуточные значения для имитации объяснения (), и посмотреть, действительно ли это проблема.

...