Lucene Zend Fuzzy Match по фразе вместо одного слова

Я пытаюсь использовать Zend Lucene для сопоставления фразы запроса, но я хочу нечеткое совпадение.

На данный момент, если я использую PhraseQuery и ищу "valentin rossi" (а в БД есть "valentino rossi"), у меня нет результатов, потому что PhraseQuery ищет строку "valentin rossi" точно, без нечеткого соответствия или подобия между слова.

Пожалуйста, дайте мне подсказку, где я должен искать рабочее решение. Заранее спасибо!

3 ответа

Zend Lucene, кажется, поддерживает нечеткий поиск. Документы здесь.

Вам просто нужно сделать что-то вроде этого:

$queryString = 'search terms here';
//add the '~' to make it fuzzy if there is a query string
$queryString = $queryString ? $queryString . '~' : $queryString;
$index = Zend_Search_Lucene::open('/path/to/index');
$results = $this->_index->find(queryString);

Lucene PhraseQuery не поддерживает подстановочные и нечеткие запросы. Я не знаю много о Zend Lucene. В lucene вы можете использовать ComplexPhraseQueryParser для выполнения поиска по фразе с нечеткими или подстановочными знаками. Он внутренне использует SpanQueries. Если вы можете использовать ComplexPhraseQueryParser или SpanQueries с Zend, у вас все получится.

Если вы используете Zend Lucene, вам нужно подготовить текст, который вы хотите найти, поэтому:

$texttosearch = 'valentin rossi';
$query = Zend_Search_Lucene_Search_QueryParser::parse($texttosearch);

//you can echo $query to see result
echo $query;

и так далее...

Посмотрите на эту замечательную книгу для Zend_Search_Lucene

Другие вопросы по тегам