我有一个这样的有效载荷,相同的有效载荷将出现在所有文档中,但每个文档中每个标签的权重都不同。
{
"tags": [
{
"tag": "tag1",
"weight": 5
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
}
Run Code Online (Sandbox Code Playgroud)
我在映射中使用了嵌套字段,因为我想匹配数组元素而不是整个数组。
{
"mappings": {
"doc": {
"properties": {
"tags": {
"type": "nested",
"properties": {
"tag": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"weight": {
"type": "double"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的要求是搜索标签并根据文档中的权重对该特定标签进行排序。我试过下面的查询,但它没有按预期排序。
{
"from": 0,
"size": 50,
"sort": [
{
"tags.weight": {
"order": "asc",
"nested_filter": {
"term": {
"tags.tag": "tag1"
}
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
编辑添加示例
Exa:假设有 3 个文档
{
"uid":1,
"tags": [
{
"tag": "tag1",
"weight": 5
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
},
{
"uid":2,
"tags": [
{
"tag": "tag1",
"weight": 9
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
},
{
"uid":3,
"tags": [
{
"tag": "tag1",
"weight": 7
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
}
Run Code Online (Sandbox Code Playgroud)
当搜索“tag1”并按升序排序时,我应该得到低于输出,即文档应该根据“tag1”的权重排序。
{
"uid": 1,
"tags": [
{
"tag": "tag1",
"weight": 5
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
},
{
"uid": 3,
"tags": [
{
"tag": "tag1",
"weight": 7
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
},
{
"uid": 2,
"tags": [
{
"tag": "tag1",
"weight": 9
},
{
"tag": "tag2",
"weight": 10
},
{
"tag": "tag3",
"weight": 7
}
]
}
Run Code Online (Sandbox Code Playgroud)
提前致谢 !!
小智 5
在inner_hits属性中,您可以设置sort.
例子:
"inner_hits":{
"sort": [
{
"tags.tag": {
"order": "asc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后,在result, 内部hits,您将拥有已inner_hits排序对象的专有性。
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |