目前,我正在尝试对一个文本搜索查询的多个结果块进行单独排序。不幸的是,我无法找到正确的语法,例如查询结果未正确排序。
我的索引包含以下字段:
"category_id": { "type": "integer" }
"type": { "type": "keyword"}
"subject": { "type": "text"},
"body": { "type": "text"},
"date": { "format": "yyyy-MM-dd HH:mm:ss", "type": "date"}
说明:
-字段“ category_id”是一个数字值
-字段“类型”可以是“ E”或“ U”
-字段“主题”包含文字
-字段“正文”包含文字
-“日期”字段包含日期
我想要实现的是在“主题”和“正文”中搜索字符串以及匹配的category_id将导致结果列表具有特殊的排序。
查询示例:
在“主题”和“正文”字段中搜索所有“ category_id”等于12的记录的文本“ foo”。
结果排序:
第一个区块:类型==“ E”的结果
第二个块:类型==“ U”
以上两个块中的结果应重新排序:
第一个区块:搜索结果为“主题”字段的结果
第二个块:搜索结果为“正文”字段的结果
最后,这两个块应分别按“日期”字段进行排序。
我当前的查询如下:
{
"query": {
"function_score": {
"query": {
"bool": {
"must": {
"multi_match": {
"query": "foo",
"operator": "and",
"fields": [
"subject^10",
"body^0.1"
]
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"category_id": 106
}
}
]
}
}
}
},
"exp": {
"date": {
"origin": "now",
"scale": "7d",
"decay": 0.9
}
}
}
},
"sort": {
"type": {
"order": "desc"
},
"_score": {
"order": "desc"
}
}
}
按类型排序可以正常工作,但是按主题,正文和日期对子块进行排序有时会变得混乱。我的想法是对点击次数和日期使用得分,以达到所需的排序...
有什么方法可以进行这种模块化的子分类吗?