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

Shr*_*ath 3 java lucene

标题要求一切......我想在Lucene做一个多字段 - 短语搜索.怎么做?

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

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

Fav*_*ius 5

  1. 使用MultiFieldQueryParser,它是一个QueryParser,它构造查询以搜索多个字段..

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

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


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


更新

用法:

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);
Run Code Online (Sandbox Code Playgroud)

MultiFieldQueryParser会解决这种方式查询:(见的javadoc)

解析查询指定字段的查询.如果指定了x字段,这有效地构造了:

(field1:query1)(field2:query2)(field3:query3)...(fieldx:queryx)

希望这可以帮助.