Нечеткое совпадение Lucene Zend по фразе вместо отдельного слова

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

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

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


person user1487934    schedule 28.06.2012    source источник
comment
Я немного сбит с толку, вы сказали, что используете Zend Lucene, а затем сказали: «… и в DB есть valentino rossi» - так вы используете DB или Zend Lucene ???   -  person tasmaniski    schedule 29.06.2012


Ответы (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);
person Rupert    schedule 17.10.2013

Если вы используете 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

person tasmaniski    schedule 29.06.2012

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

person ali    schedule 29.06.2012