Поиск номеров с Zend_Search_Lucene - PullRequest
5 голосов
/ 13 февраля 2009

Так почему первый пример поиска ниже не дает результатов? И любые идеи о том, как изменить приведенный ниже код, чтобы сделать возможным поиск по номеру, будут высоко оценены.

Создать индекс

$index = new Zend_Search_Lucene('/myindex', true);
$doc->addField(Zend_Search_Lucene_Field::Text('ssn', '123-12-1234'));
$doc->addField(Zend_Search_Lucene_Field::Text('cats', 'Fluffy'));
$index->addDocument($doc);
$index->commit();

Поиск - НЕТ РЕЗУЛЬТАТОВ

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('123-12-1234');

Поиск - С РЕЗУЛЬТАТАМИ

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('Fluffy');

Ответы [ 2 ]

3 голосов
/ 03 ноября 2009

Сначала вам нужно изменить текстовый анализатор, чтобы включить числа

Zend_Search_Lucene_Analysis_Analyzer :: setDefault (новый Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum ());

Затем для полей с номерами вы хотите использовать Zend_Search_Lucene_Field :: Keyword вместо Zend_Search_Lucene_Field :: Text это пропустит создание токенов и сохранит значение «как есть» в индексе. Тогда вы можете искать по нему. Я не знаю, как он ведет себя с числами с плавающей точкой (вероятно, не будет работать для чисел с плавающей точкой 3.0 не будет соответствовать 3), но для натуральных чисел (например, идентификаторов) работает как шарм.

2 голосов
/ 14 февраля 2009

Это эффект того, какой анализатор вы выбрали.

Я полагаю, что анализатор по умолчанию будет индексировать только те термины, которые соответствуют / [a-zA-Z] + /. Это означает, что ваш SSN не добавляется в индекс как термин.

Даже если вы переключились на текстовый + числовой регистр без учета регистра, то, что вы хотите, все равно не будет работать. Выражение для термина - это / [a-zA-Z0-9] + / это будет означать, что ваши термины, добавленные в индекс, будут 12,123,1234.

Если вам нужно, чтобы 123-12-1234 рассматривался как допустимый термин, вам, вероятно, потребуется расширить Zend_Search_Lucene_Analysis_Analyzer_Common и сделать так, чтобы 123-12-1234 был термином.

См http://framework.zend.com/manual/en/zend.search.lucene.extending.html#zend.search.lucene.extending.analysis

Ваш другой выбор - сохранить ssn как Zend_Search_Lucene_Field :: Keyword. Поскольку ключевое слово не разбито на термины.

http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types

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