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