我正在搜索所有内容的关键字。如果我在搜索框中输入完整的帖子标题,它将显示在底部。正如我根据post_date
订购我的帖子但是有任何办法
因此,大多数分数将显示在最顶层,我可以根据post_date
和exact match
合并此订单。
我正在使用以下查询: -
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "Post title keyword goes here.."
}
},
{
"term": {
"post_status": "publish"
}
}
]
}
},
"sort": [
{
"post_date": {
"order": "desc"
}
}
],
"from": 0,
"size": 20
}
答案 0 :(得分:0)
我认为这将是对弹性搜索不支持的分组。但是,您可以操纵评分,然后根据评分对结果进行排序。有关如何更改评分的更多详细信息,请访问:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
答案 1 :(得分:0)
我们可以使用sort中的_score
在顶部订购完全匹配。我需要改变我的JSON: -
"sort": [
"_score",
{
"post_date": {
"order": "desc"
}
}
],
添加_score
作为第一个字段。
答案 2 :(得分:0)
我相信这是关于你要找的东西:
{
"query": {
"custom_filters_score": {
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "Post title keyword goes here.."
}
},
{
"term": {
"post_status": "publish"
}
}
]
}
},
"filters": [
{
"filter": {
"exists": {
"field": "post_date"
}
},
"script": "doc['post_date'].date.getMillis() " /* calculate custom boost from date */
},
{
"filter": {
"query": {
"query_string": {
"query": "Post title keyword goes here..",
"default_operator": "AND"
}
}
},
"boost": 100
}
]
}
}
}