1

我正在使用 Zend Search Lucene,如果用户在搜索框中输入 Vibrant Bouquet,则会返回带有单词“Vibrant”或单词“bouquet”(或两者兼而有之)的结果。我想要的只是用这两个词返回这些结果。

显然,我可以通过在单词之间键入 AND 来做到这一点,但据我所知,Lucene 隐含地在每个单词之间放置 OR;是否可以更改此设置,以便在每个单词之间隐式放置 AND,以便搜索的默认行为是查找所有单词,而不仅仅是一个或多个单词?

我可以在搜索词上使用字符串替换来用 AND 替换空格,但这可能会导致停止用户输入更复杂的查询时出现问题。

4

2 回答 2

3

我已经为你搜索了谷歌:

可以分别使用Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)Zend_Search_Lucene_Search_QueryParser::getDefaultOperator()方法设置或检索默认布尔运算符。

这些方法使用Zend_Search_Lucene_Search_QueryParser::B_ANDZend_Search_Lucene_Search_QueryParser::B_OR常量进行操作。

http://framework.zend.com/manual/en/zend.search.lucene.query-language.html

于 2010-08-12T14:07:00.687 回答
1

我尝试了这段代码,但这不起作用:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator('AND');

但这段代码有效:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

并获得更大的灵活性:

$term='zand search';

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

$query = Zend_Search_Lucene_Search_QueryParser::parse($term."*",'UTF-8');


$results = $index->find($query );

结果例如:

(某个世界)zend 搜索(某个世界)

Zend 搜索 lucence

为了获得更多灵活性,请使用查询语言:

查询语言

于 2012-11-11T12:20:24.370 回答