所以我的Elasticsearch集群中有一个索引。
每个文档都有一个嵌套字段Reviews
,这是一组不同的评论。 Reviews
数组的每个条目都是JSON,并且包含一个字段Content
,其中包含评论的实际内容。
现在,对于给定的文档,我只希望Reviews
数组中的happy
包含特定关键字(如Content
)的评论。我无法弄清楚要执行此操作的查询。有人可以告诉我如何进行上述查询。
答案 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" : {}
}
}
}