我是Elasticsearch的新手,并提出一个问题,即Elasticsearch嵌套查询是否只返回嵌套字段的匹配嵌套文档.
例如,我有一个名为blog嵌套字段的类型comments
{
"id": 1,
...
"comments":[
{"content":"Michael is a basketball player"},
{"content":"David is a soccer player"}
]
}
{
"id": 2,
...
"comments":[
{"content":"Wayne is a soccer player"},
{"content":"Steven is also a soccer player"},
]
}
Run Code Online (Sandbox Code Playgroud)
和嵌套查询
{"query":{
"nested":{
"path":"comments",
"query":{"match":{"comments.content":"soccer"}}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要的是搜索带有提及"足球"的评论的博客帖子,其中每个博客文章的评论数量与"足球"相匹配(在示例中它的数量为1,因为另一条评论刚刚提到"篮球").
{"hits":[
{
"id":1,
...
"count_for_comments_that_matches_query":1,
},
{
"id":2,
...
"count_for_comments_that_matches_query":2,
}
]}
Run Code Online (Sandbox Code Playgroud)
然而,似乎Elasticsearch总是返回完整的文档,所以我怎么能实现它,或者我不能?
答案就在这里。
您需要使用nested inner hitsElasticsearch的功能。
{
"_source": [
"id"
],
"query": {
"bool": {
"must": [
{
"match": {
"id": "1"
}
},
{
"nested": {
"path": "comments",
"query": {
"match": {
"comments.content": "soccer"
}
},
"inner_hits": {}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这会解决问题
| 归档时间: |
|
| 查看次数: |
1263 次 |
| 最近记录: |