Lucen查询所有字段

时间:2016-09-15 08:50:27

标签: java solr lucene

我使用Lucene 6.2.0并尝试搜索文档中的所有字段,而不发送所有字段名称。我看过these answers,但在我看来,我的版本中不再存在这些方法。

1 个答案:

答案 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");