【问题标题】:Lucene - how to make multiple words within query AND instead of OR togetherLucene - 如何在查询中创建多个单词而不是 OR 一起
【发布时间】:2011-03-28 23:02:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: php zend-framework search lucene zend-search-lucene


    【解决方案1】:

    我已经在谷歌上搜索过你:

    可以分别使用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

    【讨论】:

    • 谢谢,我在看查询构造api页面。
    【解决方案2】:

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

    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

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

    Query Language

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2014-05-26
      • 2014-09-17
      相关资源
      最近更新 更多