elasticsearch 如何根据折叠项目的数量对elasticsearch结果进行排序?
我正在使用一个带有折叠的查询来收集某个人下面的一些文档,但我希望根据搜索找到匹配项的文档数量对结果进行排序。。这是我的疑问:
elasticsearch 如何根据折叠项目的数量对elasticsearch结果进行排序?,
elasticsearch,search,elastic-stack,
elasticsearch,Search,Elastic Stack,我正在使用一个带有折叠的查询来收集某个人下面的一些文档,但我希望根据搜索找到匹配项的文档数量对结果进行排序。。这是我的疑问: GET documents/_search { "_source": { "includes": [ "text" ] }, "query": { "query_string": { "fields": [ "text" ], "query": "some text"
GET documents/_search
{
"_source": {
"includes": [
"text"
]
},
"query": {
"query_string": {
"fields": [
"text"
],
"query": "some text"
}
},
"collapse": {
"field": "person_id",
"inner_hits": {
"name": "top_mathing_docs",
"_source": {
"includes": [
"doc_year",
"text"
]
}
}
}
}
有什么建议吗
谢谢如果我理解正确,您在这里需要的是根据内部点击次数对文档进行排序,即父文档,即根据
个人id
对内部点击次数进行排序
这意味着,结果中父文档的\u分数
并不重要
我发现这是可行的唯一方法是使用,下面是您的查询的样子
聚合查询字段折叠示例:
POST/\u搜索
{
“大小”:0,
“查询”:{
“查询字符串”:{
“字段”:[
“文本”
],
“查询”:“一些文本”
}
},
“aggs”:{
“顶级人员ID”:{
“条款”:{
“字段”:“人员id”
},
“aggs”:{
“热门标签”\u点击次数:{
“热门歌曲”:{
“尺寸”:10
}
}
}
}
}
}
请注意,我假设person\u id
的类型为keyword
或任何numeric
。
另外,如果您仔细查看查询,我已经提到了“大小”:“0”
。这意味着我只返回聚合的结果
另一个注意事项是,上面的聚合与您在问题中发布的特性无关。只是使用这个聚合,您的结果可以以类似的方式格式化
让我知道这是否有帮助 谢谢@Kamal,我试图使用聚合,但我似乎也遇到了同样的死胡同。。我无法根据包含查询的文档数量(按作者分组)对搜索结果进行排序。至于collapse,我用它来显示文档的一些细节,事实上它并没有那么重要,但是在'internal_hits'对象中,有一个'total'变量,这实际上就是我要寻找的,但是我找不到一种方法来访问它,并根据它对父对象进行排序to@RoyGranit我提供的查询不会基于作者进行分组,也不会基于文档计数进行排序。当您执行上述聚合查询时,您是否可以将结果共享为它在您端的显示方式?也就是说,我已尝试实现您提到的目标,即利用内部点击的总数
,并通过基于无痛脚本的排序对其进行排序
,但不幸的是,由于此链接中提到的原因,这是不可能的,如果这是您想要的,那么我担心在这种情况下,您可能必须在服务/客户机层进行这种计算。但我想等到您共享使用我提供的聚合查询观察到的输出以及您要查找的更多内容。我完成了一个初始查询,以发现文档的数量,并使用这些数字对第二个查询的输出进行重新排序。谢谢你的帮助。
POST <your_index_name>/_search
{
"size":0,
"query": {
"query_string": {
"fields": [
"text"
],
"query": "some text"
}
},
"aggs": {
"top_person_ids": {
"terms": {
"field": "person_id"
},
"aggs": {
"top_tags_hits": {
"top_hits": {
"size": 10
}
}
}
}
}
}