在' _all'下搜索子字段在弹性搜索中

时间:2016-02-17 01:21:49

标签: java elasticsearch

我有一个具有细分的字段,例如:

             //name
            .startObject(IndexConstants.FIRST_NAME)
            .field("type").value("string")
            .startObject("fields")
            .startObject("folded")
            .field("type").value("string")
            .field("analyzer").value("folding")
            .endObject()
            .endObject()

_all字段仅搜索firstname,而不是firstname.folded。如果我专门查询.folded它可以工作,但它是一个捕获所有查询所以我不想指定折叠。
我试过" include_in_all"这是真的,但没有变化。

谢谢

1 个答案:

答案 0 :(得分:1)

正如official documentation所示,在多字段中使用include_in_all毫无意义:

  

原始字段值将添加到_all字段,而不是字段分析器生成的字词。因此,在多字段上设置include_in_alltrue没有意义,因为每个多字段的值与其父字段完全相同。

使用copy_to可以是版本< 2.x的选项。但是,将copy_to与多字段will be ignored as of 2.0一起使用,甚至从2.0.1和2.1开始抛出异常。

您最好直接在firstname.folded上进行匹配,如果查询该子字段非常重要,只需在主folding上使用其firstname分析器即可领域并摆脱子领域。