如何进行多字段 - 在Lucene中进行短语搜索?

时间:2011-02-24 04:56:54

标签: java lucene

标题要求一切......我想在Lucene进行多字段搜索..怎么做?

例如: 我有String s[] = {"title","author","content"};字段 我想在所有领域搜索harry potter ..我该怎么办?

有人可以提供一个示例代码段吗?

3 个答案:

答案 0 :(得分:5)

  1. 使用MultiFieldQueryParser,其一个QueryParser构建查询以搜索多个字段。

  2. 其他方法是使用创建由TermQurey组成的BooleanQuery(在您的案例短语查询中)。

  3. 第三种方法是将其他字段的内容包含在您的default内容字段中。

  4. <小时/> 添加

    一般来说,查询多个字段不是用户输入查询的最佳做法。更常见的是,通过组合各种字段,将要搜索的所有单词编入索引到内容或关键字字段中。

    <小时/> 的更新

    用法:

    Query query = MultiFieldQueryParser.parse(Version.LUCENE_30, new String[] {"harry potter","harry potter","harry potter"},   new String[] {"title","author","content"},new SimpleAnalyzer());
    IndexSearcher searcher = new IndexSearcher(...);
    Hits hits = searcher.search(query);
    

    MultiFieldQueryParser将以这种方式解析查询:(请参阅javadoc)

      

    解析搜索的查询   指定的字段。如果x字段是   指定,这有效   结构:

         

    (field1:query1)(field2:query2)   (字段3:QUERY3)...(fieldx:queryx)

    希望这有帮助。

答案 1 :(得分:0)

加强谷歌搜索显示: http://lucene.472066.n3.nabble.com/Phrase-query-on-multiple-fields-td2292312.html
由于它是最新的和最好的,我会采用他的方法我猜...但是,它可能会帮助那些正在寻找像我这样的人......

答案 2 :(得分:0)

您需要将 MultiFieldQueryParser 与转义字符串一起使用。我已经用 Lucene 8.8.1 对其进行了测试,它的效果非常好。

String queryStr = "harry potter";
queryStr = "\"" + queryStr.trim() + "\"";
Query query = new MultiFieldQueryParser(new String[]{"title","author","content"}, new StandardAnalyzer()).parse(queryStr);
System.out.println(query);

它会打印。

(title:"harry potter") (author:"harry potter") (content:"harry potter")