Sorting Elasticsearch-按输入选项排序
我有一个包含以下数据的索引:Sorting Elasticsearch-按输入选项排序,sorting,
elasticsearch,Sorting,
elasticsearch,我有一个包含以下数据的索引: { "_index":"businesses", "_type":"business", "_id":"1", "_version":1, "found":true, "_source":{ "business":{ "account_level_id":"2", "business_city":"Abington", "business_country":"United States
{
"_index":"businesses",
"_type":"business",
"_id":"1",
"_version":1,
"found":true,
"_source":{
"business":{
"account_level_id":"2",
"business_city":"Abington",
"business_country":"United States of America",
}
}
}
当我查询索引时,我想按帐户\级别\ id(1-5之间的数字)排序。问题是,我不想按ASC或DESC顺序排序,而是按以下顺序排序:4..3..5..2..1。这是由几年前的不良行为造成的,其中帐户级别在级别4时达到最大值,但随后添加了一个级别较低的帐户,其值为5。有没有办法告诉ES我希望结果按特定顺序返回?如果可以在DESC中进行排序,则可以创建映射整数的函数并使用它进行排序。
DESC应该像(5 4 3 2 1)、5替换为4、4替换为3、3替换为5那样对它们进行排序
int map_to(int x){
switch(x){
case 1: case 2: return x;
case 3: return 4;
case 4: return 5;
case 5: return 3;
}
}
并将其用于您的排序算法(因此,当排序算法必须比较x与y时,它应该将map_与(x)与map_与(y)进行比较,这将使4位于3和5之前,如您所愿。您可以编写一个类似(未经测试):
或者,如果可能,您可以创建另一个字段sort\u level
,该字段将account\u level\u id
映射到您可以排序的合理值
{
"_index":"businesses",
"_type":"business",
"_id":"1",
"_version":1,
"found":true,
"_source":{
"business":{
"account_level_id":"4",
"business_city":"Abington",
"business_country":"United States of America",
"sort_level": 5
}
}
}
这将在我得到结果之后起作用,但由于分页,我需要在得到结果之前进行排序。
{
"_index":"businesses",
"_type":"business",
"_id":"1",
"_version":1,
"found":true,
"_source":{
"business":{
"account_level_id":"4",
"business_city":"Abington",
"business_country":"United States of America",
"sort_level": 5
}
}
}