Elasticsearch 是否支持 MultiMatch 中的嵌套或对象字段?

Does Elasticsearch support nested or object fields in MultiMatch?

我有一些名为“FullTitleFts”的对象字段。它里面有字段“文本”。此查询工作正常(和 returns 一些条目):

GET index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "fullTitleFts.text": "Ivan"
          }
        }
      ]
    }
  }
}

但是这个查询returns什么都没有:

GET index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "Ivan",
            "fields": [
              "fullTitleFts.text"
            ]
          }
        }
      ]
    }
  }
}

字段映射:

"fullTitleFts": {
    "copy_to": [
        "text"
    ],
    "type": "keyword",
    "fields": {
        "text": {
            "analyzer": "analyzer",
            "term_vector": "with_positions_offsets_payloads",
            "type": "text"
        }
    }
}


"analyzer": {
    "filter": [
        "lowercase",
        "hypocorisms",
        "protect_kw"
    ],
    "char_filter": [
        "replace_char_filter",
        "e_char_filter"
    ],
    "expand": "true",
    "type": "custom",
    "tokenizer": "standard"
}  

e_char_filter 用于将西里尔字符“ё”替换为“е”,replace_char_filter 是用于从文本中删除“�”。 protect_kw 对于某些俄罗斯工会来说是 keyword_marker。 hypocorisms 是 synonym_graph 用于制作另一种形式的名称。

分析器输出示例:

GET index/_analyze
{
  "analyzer": "analyzer",
  "text":     "Алёна�"
}

{
  "tokens" : [
    {
      "token" : "аленка",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "SYNONYM",
      "position" : 0
    },
    {
      "token" : "аленушка",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "SYNONYM",
      "position" : 0
    },
    {
      "token" : "алена",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    }
  ]
}

我也找到了 this question。似乎答案并没有真正奏效——作者不得不在映射中添加“include_in_root”选项。所以我想知道多重匹配是否完全支持嵌套或对象字段。我在文档中也找不到任何相关信息。

由于您提供了索引映射,因此您的字段被定义为 multi-field 而不是嵌套字段或对象字段。所以 matchmulti_match 都应该在不提供 path 的情况下工作。您可以在需要搜索文本类型时使用字段名称 fullTitleFts.text,在需要搜索关键字类型时使用 fullTitleFts