elasticsearch - Elasticsearch 查询嵌套文档并在聚合期间使用嵌套文档分数进行排序
问题描述
我有一组看起来像的文件
文件 1:
{
outerField: [
{
innerField: "Hello there world"
},
{
innerField: "Hey World"
}
]
}
文件 2:
{
outerField: [
{
innerField: "Hello world"
},
{
innerField: "Hello"
}
]
}
有没有办法搜索嵌套对象并返回那些嵌套对象,其中每个搜索命中都是一个嵌套对象,按嵌套对象与搜索查询的匹配程度排序?例如,如果我搜索 innerField = “hello there world” 的嵌套对象,我想要的结果如下:
点击:
{
innerField: "Hello there world"
},
{
innerField: "Hello world"
},
{
innerField: "Hello"
},
{
innerField: "Hey World"
}
基本上我想查询这个索引,就好像数据被索引一样:
文件 1:
{
innerField: "Hello there world"
}
文件 2:
{
innerField: "Hello world"
}
文件 3:
{
innerField: "Hello"
}
文件 4:
{
innerField: "Hey World"
}
我发出一个像这样的查询
{
"query": {
"match": {
"innerField": "hello there world"
}
}
}
编辑:
POST index/_search
{
"size": 0,
"query": {
"nested": {
"path": "outerField",
"query": {
"match": { "outerField.innerField": <query> }
},
"score_mode": "max"
}
},
"aggs": {
"nested": {
"nested": {
"path": "outerField"
},
"aggs": {
"filter": {
"filter": {
"match": { "outerField.innerField": <query> }
},
"aggs": {
"bucket": {
"top_hits": {
"size": 100
}
}
}
}
}
}
}
}
这很接近,但问题是每个嵌套对象都被赋予文档中所有嵌套对象的最大分数,因此聚合的排序是错误的。有没有办法让聚合中的每个对象保持该嵌套对象的原始分数?
解决方案
推荐阅读
- android - Visual Studio 认为我没有安装 Hyperv。为什么?
- node.js - 参考错误:D:\nodejs\crud\views\employee\addOrEdit.ejs:8
- qt - Qt Creator中输入if/then条件或函数时如何从()跳转到{}?
- python - Wagtail:挂钩更改子页面的顺序
- java - 泛型通配符方法的编译错误
- assembly - 消除 Intel 语法中寄存器名称的歧义
- javascript - 无法在 webgl 中将画布渲染为纹理,但会渲染蓝色
- c# - 使用原始 email.body 将电子邮件另存为 .eml
- r - 如何在行不是所有 NA 的数据帧行中替换 NA
- javascript - 从 html 表中的 firebase 中检索同一级别节点的数据