elasticsearch,Sorting,elasticsearch" /> elasticsearch,Sorting,elasticsearch" />

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
        }
    }
}