标题要求一切......我想在Lucene进行多字段搜索..怎么做?
例如:
我有String s[] = {"title","author","content"};
字段
我想在所有领域搜索harry potter
..我该怎么办?
有人可以提供一个示例代码段吗?
答案 0 :(得分:5)
使用MultiFieldQueryParser
,其一个QueryParser构建查询以搜索多个字段。。
其他方法是使用创建由TermQurey组成的BooleanQuery(在您的案例短语查询中)。
第三种方法是将其他字段的内容包含在您的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字段是 指定,这有效 结构:
(field1:query1)(field2:query2) (字段3:QUERY3)...(fieldx:queryx)
希望这有帮助。
答案 1 :(得分:0)
答案 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")