【问题标题】:How to search across multiple fields in Lucene using Query Syntax?如何使用查询语法在 Lucene 中搜索多个字段?
【发布时间】:2012-01-08 03:26:03
【问题描述】:

我正在搜索 lucene 索引,并且正在构建类似的搜索查询

field1:"hello" AND field2:"world"

但我想搜索任何字段中的值以及同一查询中特定字段中的值,即

field1:"hello" AND anyField:"world"

谁能告诉我如何以这种方式搜索所有索引字段?

【问题讨论】:

    标签: java lucene indexing


    【解决方案1】:

    根据我对这个问题的回答:Impact of repeat value across multiple fields in Lucene...

    我可以将相同的搜索词放入多个字段中,因此创建一个“全部”字段,我将所有内容都放入其中。这样我可以创建一个查询,例如...

    field1:"hello" AND all:"world"
    

    这似乎工作得非常好,避免了对大量搜索查询的需求,而且显然对性能的影响很小。

    【讨论】:

      【解决方案2】:

      每个字段都有一个子句的布尔 (OR) 查询用于搜索多个字段。 MultiFieldQueryParser 也会这样做,但仍需要枚举字段。没有隐含的“所有”字段;但IndexReader.getFieldNames 可以获取它们。

      【讨论】:

      • 我已经创建了一个明确的“all”字段......这看起来并不理想,但每次我创建一个字段时,我都会添加到“all”字段中。它有效,但似乎有点垃圾。我真正想做的是为每个索引字段定义多个名称,这样我就可以创建类别或能够使用字段名称中的通配符搜索字段,这样我就可以在“name*”中搜索“name.firstname:bob”
      【解决方案3】:

      这可能不适用于你,但在基于 Lucene 的 Azure 搜索中,使用 Lucene 语法,我使用这个:

      name:plywood^100 OR plywood
      

      “名称”字段中包含“胶合板”的结果会得到提升。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多