Elasticsearch 将嵌套字段与值数组匹配

Elasticsearch match nested field against array of values

我正在尝试使用 mongoid-elasticsearch and ElasticSearch 2.0. This has come to be quite frustrating since the trial-error didn't pay off much and the docs 在嵌套字段上应用术语查询,主题相当稀疏。 这是我的查询:

  {
    "query": {
      "nested": {
        "path": "awards",
        "query": {
          "bool": {
            "must": [
              { "match": { "awards.year":  "2010"}}
            ]
          }
        }
      },
      "nested":{
        "path": "procuring_entity",
        "query": {
          "bool": {
            "must": [
              { "terms": { "procuring_entity.country": ["ES", "PL"]}}
            ]
          }
        }
      }
    }
  }

虽然 "match" 和 "term" 工作得很好,但当与 "terms" 结合查询时它 returns 没有结果,即使认为它应该。我的映射如下所示:

  elasticsearch!({
    prefix_name: false,
    index_name: 'documents',
    index_options: {
      mappings: {
        document: {
          properties: {
            procuring_entity: {
              type: "nested"
            },
            awards: {
              type: "nested"
            }
          }
        }
      }
    },
    wrapper: :load
  })

如果 "nested" 不算作分析器(据我所知不算),那么这没有问题。至于second example,我不认为是这种情况,因为它匹配的值数组来自外部。 嵌套字段是否可以进行术语查询?难道我做错了什么? 有没有其他方法可以将嵌套字段与多个值匹配?

如有任何想法,我们将不胜感激。

我认为您需要更改映射,因为您的 nested types for this - the terms query 仅适用于 not_analyzed 字段。如果您将映射更新为:

elasticsearch!({
    prefix_name: false,
    index_name: 'documents',
    index_options: {
    mappings: {
        document: {
            properties: {
                procuring_entity: {
                    type: 'nested',
                    properties: {
                        country: {
                            'type': 'string',
                            'index': 'not_analyzed'
                        }
                    }
                },
                awards: {
                    type: 'nested'
                }
            }
        }
    }
    },
    wrapper: :load
})

我认为如果您这样做,查询应该有效。