我有这个字段映射
"my_field":{
"long"
}
此字段只能采用四个值" 1,2,3,4" 。 我想按照这个字段排序我的文件" my_field",按顺序排列:显示的第一个文件是my_field是1,3或4的位置,以及my_field = 2最后显示的位置。
我已经尝试过一些事情来重新调整my_field = 2的文件,但它没有正常工作。
"rescore": [
{
"query": {
"rescore_query": {
"match": {
"my_field": {
"query": 2,
"slop": 1
}
}
},
"query_weight": 0.0001,
"rescore_query_weight": 0.0001
}
}
],
如何通过my_field值获取结果顺序,如下所示:1,3,4,2
映射:
{
"index_name" : {
"mappings" : {
"type_name" : {
"properties" : {
"address" : {
"type" : "string"
},
"country_id" : {
"type" : "long"
},
"county_id" : {
"type" : "long"
},
"created" : {
"type" : "long"
},
"my_field":{
"long"
}
}
}
}
这是查询:
{
"fields": [
"_source"
],
"query": {
"terms": {
"my_field": [
1,
2
]
}
},
"rescore": [
{
"query": {
"rescore_query": {
"match": {
"my_field": {
"query": 2
}
}
},
"query_weight": 0.1,
"rescore_query_weight": 1
}
},
{
"query": {
"rescore_query": {
"match": {
"my_field": {
"query": 1
}
}
},
"query_weight": 1,
"rescore_query_weight": 33
}
}
]
}
我在这里发布了my_field的尝试增加分数,其中值为1,减去值为2
答案 0 :(得分:1)
我会考虑"排序"分数ES的文件在搜索时给出。如果您只对排序文档感兴趣,即使您的查询中有其他内容(例如,您搜索某些地址),我也会为每个" my_field"提供查询的元素。重视不同的boost
值以及对排序过程中我不感兴趣的查询元素 - constant_score
:
{
"fields": ["_source"],
"query": {
"bool": {
"must": [
{ "constant_score": {
"query": {"terms": {"my_field": [1, 2, 3, 4] }}}}
],
"should": [
{ "match": { "my_field" : {"query": 1, "boost" : 8}}},
{ "match": { "my_field" : {"query": 3, "boost" : 8}}},
{ "match": { "my_field" : {"query": 4, "boost" : 8}}},
{ "match": { "my_field" : {"query": 2, "boost" : 1}}}
]
}
}
}
在上面的示例中,我给出了一些我不想干扰评分计算的内容的常数得分值(默认值为1)。对于my_field"值我使用match
为每个(知道每个文档都填充了该字段)但具有不同的boost
值。 1,3和4被平等对待(给它们一个大的boost
8),2被正常处理(boost
值为1)。
答案 1 :(得分:0)
我能够得到我预期的结果如下:
{
"fields": [
"_source"
],
"size": 20,
"query": {
...
},
"sort": [
{
"my_field": {
"order": "asc",
"nested_filter": {
"terms": {
"my_field": [
1,
3,
4
]
}
}
}
}
]
}
现在my_field等于2的结果列在最后。