代码之家  ›  专栏  ›  技术社区  ›  Gnuffo1

Lucene-如何在查询中创建多个单词,而不是一起创建多个单词

  •  1
  • Gnuffo1  · 技术社区  · 16 年前

    我使用Zend Search Lucene,如果用户在搜索框中输入vibrative buquet,则返回带有单词“vibrate”或单词“buquet”(或两者都是)的结果。我只想用这两个词返回结果。

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

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

    2 回复  |  直到 11 年前
        1
  •  3
  •   Samira Khorshidi    11 年前

    我在谷歌上搜索过你:

    可以使用 Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator) 和 Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() 方法。

    这些方法与 Zend_Search_Lucene_Search_QueryParser::B_AND 和 Zend_Search_Lucene_Search_QueryParser::B_OR 常量。

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

        2
  •  1
  •   za_al    13 年前

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

    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 Search(某些世界)

    Zend搜索Lucence

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

    Query Language

    推荐文章