我有以下文件:
GET /books
[{
"title": "a book",
"certified": true,
"publisherId": 1
},
{
"title": "book a",
"certified": false
"publisherId": 2
}]
当我在title
上进行简单的查询字符串查询时,我希望在_score上订购结果。
如果_score相等,则应首先显示认证的书籍
如果_score相等且书籍已通过认证,则应首先显示 publisherId 1 的图书。
如何在ES中实现这些类型的决胜局规则/排序规则?
我想做这样的事情,但显然它不起作用:
{
"query": {},
"sort": [
{"_score": {"order": "desc"},
{"term": {"certified": true}},
{"term": {"publisherId": "1"}}
]
}
答案 0 :(得分:1)
您可以根据bool/should
和certified
约束使用publisherId
查询来提升文档。
如果您删除以下查询中的bool/should
,则所有文档的评分方式都相同。添加bool/should
会增强certified
和publisherId: 1
{
"query": {
"bool": {
"must": [
{
"match": {
"title": {
"query": "book",
"boost": 3
}
}
}
],
"should": [
{
"term": {
"certified": true
}
},
{
"term": {
"publisherId": 1
}
}
]
}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
]
}