【发布时间】:2016-09-16 02:47:18
【问题描述】:
我正在使用 Lucene 6.2.0 并尝试搜索文档中的所有字段,而不发送所有字段名称。我见过these answers,但在我看来这些方法在我的版本中不再存在。
【问题讨论】:
我正在使用 Lucene 6.2.0 并尝试搜索文档中的所有字段,而不发送所有字段名称。我见过these answers,但在我看来这些方法在我的版本中不再存在。
【问题讨论】:
您链接到的问题中的热门答案在很大程度上仍然有效。
我建议您在文档中索引一个“äll”字段。这是一个众所周知的模式(实际上是 Elasticsearch does this by default)。只需创建一个索引、分析和不存储的字段,并将所有可搜索的字段也添加到其中。
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,只要您能够生成要搜索的所有字段名称的列表:
QueryParser parser = new MultiFieldQueryParser(
new String[] {"field1", "field2" /*etc.*/},
myAnalyzer);
Query query = parser.parse("the query");
【讨论】: