elasticsearch - 按IN值列表位置排序

标签 elasticsearch

我需要构建 flex 搜索查询,并按数组中的字段值定位进行排序。
与MySQL类似:

SELECT * FROM `comments` ORDER BY FIELD(`id`,'17','3','5','12') DESC, id DESC;
或Postgres:
SELECT * FROM comments
LEFT JOIN unnest('{12,5,3,17}'::int[]) WITH ORDINALITY t(id, ord) USING (id) ORDER  BY t.ord, id DESC;

最佳答案

您正在寻找Elasticsearch中的自定义排序
可以通过轻松的脚本来实现
这是我的工作

PUT my_test
{
  "mappings": {
    "properties": {
      "animal": {
        "type": "keyword"
      }
    }
  }
}
填充文档
POST my_test/_doc
{
  "animal": "mouse"
}
POST my_test/_doc
{
  "animal": "cat"
}
POST my_test/_doc
{
  "animal": "dog"
}
自定义排序
GET my_test/_search
{
  "query": {
    "match_all": {}
  },

    "sort": {
        "_script": {
            "type": "number",
            "script": {
                "lang": "painless",
                "source": "if(params.scores.containsKey(doc['animal'].value)) { return params.scores[doc['animal'].value];} return 100000;",
                "params": {
                    "scores": {
                        "dog": 0,
                        "cat": 1,
                        "mouse": 2
                    }
                }
            },
            "order": "asc"
        }
    }
}

关于elasticsearch - 按IN值列表位置排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62661258/

相关文章:

elasticsearch - 在嵌套文档中搜索多个字段,在 Elasticsearch 中用or子句分隔

elasticsearch - 重复数据-Elasticsearch

java - Elasticsearch : plain text file instead of JSON

elasticsearch - Elasticsearch:在脚本中访问嵌套文档属性

elasticsearch - 在Liferay中搜索

elasticsearch - Elasticsearch :在查询中包含多个字段

c# - 使用 mySQL 数据库在 C# 中实现 ElasticSearch

elasticsearch - 使用Elasticsearch中的同义词查找精确值

elasticsearch - ES查询以匹配查询中尽可能多的单词

linux - curl 命令在 bash 脚本中不起作用