简体   繁体   English

Elasticsearch High level Java Client 6.0.1 实现基于脚本的排序

[英]Elasticsearch High level Java Client version 6.0.1 to implement script based sorting

I'm using ES version 6.0.1 and have integrated the Java High level rest client having version 6.0.1 in my application.我正在使用 ES 版本 6.0.1 并在我的应用程序中集成了版本为 6.0.1 的 Java 高级其余客户端。

I am currently trying to build this script based sorting query using the Java High Level Rest client API of elastic search:我目前正在尝试使用弹性搜索的 Java 高级 Rest 客户端 API 构建这个基于脚本的排序查询:

{
  "sort": {
    "_script": {
      "type": "number",
      "script": {
        "lang": "painless",
        "params": {
          "ids": [3, 2, 1570]
        },
        "source": """
          int idsCount = params.ids.size();
          int id = (int)doc['id'].value;
          int foundIdx = params.ids.indexOf(id);
          return foundIdx > -1 ? foundIdx: idsCount + 1;
        """
      }
    }
  }
}

But I couldn't find any documentation regarding the script based sorting queries for the java client.但是我找不到任何关于 Java 客户端基于脚本的排序查询的文档。 I would appreciate if someone will help me out in implementing the above query using java API.如果有人能帮助我使用 Java API 实现上述查询,我​​将不胜感激。

I am not sure about ES version 6.0.1.我不确定 ES 版本 6.0.1。 I am using ES version 7.9.0我正在使用 ES 版本 7.9.0

This works for me.这对我有用。

Map<String, List<int>> params = new HashMap<String, List<int>>();
List<int> list = Arrays.asList(3, 2, 1570);
params.put("ids", list);

SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
            .size(size)
            .from(from);

Script inlineScript = new Script(ScriptType.INLINE, "painless", "int idsCount = params.ids.size();
                                                                 int id = (int)doc['id'].value;
                                                                 int foundIdx = params.ids.indexOf(id);
                                                                 return foundIdx > -1 ? foundIdx: idsCount + 1;", params);
                
ScriptSortBuilder ssb = new ScriptSortBuilder(inlineScript, ScriptSortType.NUMBER).order(SortOrder.ASC);
searchSourceBuilder.sort(ssb);
searchRequest.source(searchSourceBuilder);
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Elasticsearch高级Rest Client Java排序不正常 - Elasticsearch High Level Rest Client Java sorting not working properly 在 Java 的 elasticsearch 高级客户端中添加身份验证 - Add authentication in elasticsearch high level client for Java 我可以在旧版本的Elasticsearch上使用新版本的Java高级别Rest客户端吗? - Can I use newer version of java high level rest client on an older version of elasticsearch? ElasticSearch 多词查询与 Java 高级 REST 客户端 - ElasticSearch Multi Term Query With Java High-Level REST Client ElasticSearch Java高级Rest客户端:建议搜索 - ElasticSearch Java high Level Rest Client: Suggest-search ElasticSearch Java 高级 REST 客户端:过滤文档和或查询 - ElasticSearch Java High Level REST Client: filter documents and or query Elasticsearch Java 高级 Rest 客户端(已弃用)VS Java 客户端 API - Elasticsearch Java High Level Rest client (deprecated) VS Java Client API ElasticSearch Rest 高级客户端重新映射错误 - ElasticSearch Rest High Level Client remapping wrong 我们如何在 Java 中为 ElasticSearch 7.4.2 Java 高级 REST 客户端创建一个 IndexRequest? - How do we create an IndexRequest in Java for ElasticSearch 7.4.2 Java High Level REST Client? 如何使用Java High Level Rest Client API映射elasticsearch查询的结果集? - How to map the resultset of elasticsearch query with Java High Level Rest Client API?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM