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

tkclm6bt  于 2022-11-07  发布在  Lucene
关注(0)|答案(3)|浏览(191)

标题问这一切...我想做一个多字段短语搜索在Lucene ...如何做?
例如:字段格式为String s[] = {"title","author","content"};
我想在所有字段中搜索harry potter ..我该怎么做?
有人能提供一个示例片段吗?

oiopk7p5

oiopk7p51#

1.使用MultiFieldQueryParser,它是一个QueryParser,用于构造查询以搜索多个字段。
1.另一种方法是使用Create一个由TermQurey组成的BooleanQuery(在你的case短语查询中)。
1.第三种方法是将其他字段的内容包含到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);

MultiFieldQueryParser将以这种方式解析查询:(请参阅javadoc)
分析在指定字段上搜索的查询。如果指定了x个字段,则将有效地构造:
(字段1:查询1)(字段2:查询2)(字段3:查询3)...(字段x:查询x)
希望这对你有帮助。

jxct1oxe

jxct1oxe2#

谷歌搜索的结果显示:
http://lucene.472066.n3.nabble.com/Phrase-query-on-multiple-fields-td2292312.html
因为这是最新的和最好的,我会去与他的方法,我想...然而,它可能会帮助有人谁正在寻找像我一样的东西...

luaexgnf

luaexgnf3#

你需要使用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")

相关问题