我使用Lucene 6.2.0并尝试搜索文档中的所有字段,而不发送所有字段名称。我看过these answers,但在我看来,我的版本中不再存在这些方法。
答案 0 :(得分:0)
您链接的问题中的最佳答案仍然大部分有效。
我建议您使用文档索引“äll”字段。这是一个非常着名的模式(事实上是Elasticsearch does this by default)。只需创建一个索引,分析和 not 存储字段,并将所有可搜索字段添加到其中。
doc.add(new TextField("field1", fieldContent, Field.Store.YES));
doc.add(new TextField("_all", fieldContent, Field.Store.NO));
doc.add(new TextField("field2", anotherField, Field.Store.YES));
doc.add(new TextField("_all", anotherField, Field.Store.NO));
//etc.
我注意到你已经标记了solr。如果您使用的是Solr,则可以使用copyFields。
这种方法绝对是我推荐的方法。它通常会提供最佳的搜索性能,并且易于使用。您可以将其设置为QueryParser默认字段,或者在简单的术语查询等中使用它。
或者(如果你不想重新索引,或者其他一些),你确实可以使用MultiFieldQueryParser
,只要你能够生成你想要搜索的所有字段名称的列表: / p>
QueryParser parser = new MultiFieldQueryParser(
new String[] {"field1", "field2" /*etc.*/},
myAnalyzer);
Query query = parser.parse("the query");