开始使用elasticsearch,不确定是否可以使用一个查询以及分页。我有一个有两种类型的索引:user
& blog
。示例映射:
"mappings": {
"user": {
"properties": {
"name" : { "type": "string" }
}
},
"blog": {
"properties": {
"title" : { "type": "string" },
"author_name" : { "type": "string" }
}
}
}
}
示例数据
用户:
[
{"name": "jemmy"},
{"name": "Tom"}
]
博客:
[
{"title": "foo bar", "author": "jemmy"},
{"title": "magic foo", "author": "Tom"},
{"title": "bigdata for dummies", "author": "Tom"},
{"title": "elasticsearch", "author": "Tom"},
{"title": "JS cookbook", "author": "jemmy"},
]
我想查询索引,当我搜索blog
时,它应该在每个匹配上执行子查询。例如:
POST /test_index/blog/_search
{
"query": {
"match": {
"_all": "foo"
}
}
}
预期(伪)结果:
[
{
title: "foo bar",
author_name: "Jemmy",
author_post_count: 2
},
{
title: "magic foo",
author_name: "Tom",
author_post_count: 3
}
]
此处author_post_count
是blog
用户撰写的帖子计数。如果它可以返回那些博客帖子而不是计数也会很棒。这可能吗?也许这个词我用得不对,但我希望我的问题很明确。
答案 0 :(得分:0)
尝试这样的事情:
POST /test_index/blog/_search
{
"query": {
"match": {
"_all": "foo"
}
},
"aggs": {
"counting_posts": {
"global": {},
"aggs": {
"authors": {
"terms": {
"field": "author",
"size": 10
}
}
}
}
}
}
使用terms
聚合时要小心,因为它正在考虑索引中的实际标记化术语列表,而不是您实际索引的内容(小写/大写,以某种方式标记化)。