过滤数组条目ElasticSearch

时间:2017-05-18 14:27:02

标签: elasticsearch

所以我的Elasticsearch集群中有一个索引。

每个文档都有一个嵌套字段Reviews,这是一组不同的评论。 Reviews数组的每个条目都是JSON,并且包含一个字段Content,其中包含评论的实际内容。

现在,对于给定的文档,我只希望Reviews数组中的happy包含特定关键字(如Content)的评论。我无法弄清楚要执行此操作的查询。有人可以告诉我如何进行上述查询。

1 个答案:

答案 0 :(得分:0)

您需要inner_hits才能满足此类要求。文档here

在下面的查询结果中,您需要查看每个文档的inner_hits部分。这只会显示匹配的内容。

如何使用它:

DELETE test
PUT test
{
  "mappings": {
    "test": {
      "properties": {
        "Reviews": {
          "type": "nested",
          "properties": {
            "Content": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}
POST /test/test/1
{
  "Reviews": [
    {
      "Content": "happy dog"
    },
    {
      "Content": "testing testing"
    }
  ]
}
POST /test/test/2
{
  "Reviews": [
    {
      "Content": "happy cat, happy owner"
    },
    {
      "Content": "whatever"
    },
    {
      "Content": "another happy customer"
    }
  ]
}

GET /test/_search
{
  "_source": false, 
  "query": {
    "nested": {
      "path": "Reviews",
      "query": {
        "match": {
          "Reviews.Content": "happy"
        }
      },
      "inner_hits" : {}
    }
  }
}