我正在使用Java和Spring Data ,Elasticsearch 6.8.14 Api.与Elasticsearch通信。我有返回此类数据的索引(我还包括此搜索结果以显示Map结构)
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_index" : "rgt",
"_type" : "carindexeddata",
"_id" : "6020354",
"_score" : 1.0,
"_source" : {
"id" : "4441",
"version" : null,
"carId" : "1263",
"mark" : "ford",
"colour" : "green",
"status" : "Approved",
......
所以基本上我存储汽车。现在我需要在返回给用户之前对它们进行排序。我必须排序:
- mark
- colour (within same mark colours are important)
- status
至于状态,排序顺序应如下:
1. BOUGHT
2. IN PRODUCTION
3. IN TESTS
4. APPROVED
因此,订购这样的汽车是可以的:
1. Ford Black Bought
2. Ford Black Approved
3. Ford White Bought
4. GMC White Bought
5. GMC White Approved
我可以用Elasticsearch中的哪种机制来排序项目?可以实现吗?你可以举一些例子吗?按字段标记、颜色状态是不正确的,因为在状态排序中有一些自定义的逻辑-它不是字母排序,而是一些权重排序,我会说..但如何在ElasticSearch中为特定的状态给予特定的权重?我是否应该为ElasticSearch中的每个状态存储一个带有一些数字的字段,并根据这个数字字段而不是状态字段直接排序?
1条答案
按热度按时间kiz8lqtg1#
对于状态字段,可以使用script sort
脚本运行缓慢。
ElasticSearch在数据预处理时效果最好。如果您可以有一个表示状态值的数字字段,性能会更好。您需要检查一下什么最适合您的情况。