【问题标题】:Lucen query all fieldsLucene查询所有字段
【发布时间】:2016-09-16 02:47:18
【问题描述】:

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

【问题讨论】:

    标签: java solr lucene


    【解决方案1】:

    您链接到的问题中的热门答案在很大程度上仍然有效。

    我建议您在文档中索引一个“ä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");
    

    【讨论】:

    • 您刚刚从我的参考答案中写下了相同的答案,并没有真正的帮助...,无论如何,在我的情况下,我需要能够在特定字段上进行搜索,并且具有您的能力复杂的查询,例如:AND、OR。搜索一个字段中的所有文本,会得到错误的结果。
    • @user5116821 所以,我提供了一个最新的、完整的答案,解决了标准(java)Lucene,而不是 Lucene.Net... 这没有帮助,因为它具有一些粗略的相似性到另外几个答案,你在你的问题中说你认为仍然不适用?至于你在这里的新问题,你为什么要问如何搜索所有字段,如果这不是你想做的?
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2012-08-06
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多