我正在尝试使用 Zend Lucene 来匹配查询短语,但我想要一个模糊匹配。
目前,如果我使用 PhraseQuery 并搜索“valentin rossi”,(在 DB 中有“valentino rossi”)我没有结果,因为 PhraseQuery 准确搜索字符串“valentin rossi”,没有模糊匹配或相似性字。
请给我一个提示,我必须在哪里寻找可行的解决方案。提前致谢!
我正在尝试使用 Zend Lucene 来匹配查询短语,但我想要一个模糊匹配。
目前,如果我使用 PhraseQuery 并搜索“valentin rossi”,(在 DB 中有“valentino rossi”)我没有结果,因为 PhraseQuery 准确搜索字符串“valentin rossi”,没有模糊匹配或相似性字。
请给我一个提示,我必须在哪里寻找可行的解决方案。提前致谢!
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);
如果您使用 Zend Lucene,您需要准备要搜索的文本,因此:
$texttosearch = 'valentin rossi';
$query = Zend_Search_Lucene_Search_QueryParser::parse($texttosearch);
//you can echo $query to see result
echo $query;
等等 ...
Lucene PhraseQuery 不支持通配符和模糊查询。我对 Zend Lucene 了解不多。在 lucene 中,您可以使用 ComplexPhraseQueryParser 执行带有模糊或通配符的短语搜索。它在内部使用 SpanQueries。如果您可以将 ComplexPhraseQueryParser 或 SpanQueries 与 Zend 一起使用,那么您应该会很好。