当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch高级Java客户端版本6.0.1实现基于脚本的排序

壤驷彦
2023-03-14

我使用的是ES版本6.0.1,并在我的应用程序中集成了版本为6.0.1的Java高级rest客户端。

我目前正在尝试使用弹性搜索的JavaHigh Level 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;
        """
      }
    }
  }
}

但我找不到任何关于java客户端基于脚本的排序查询的文档。如果有人能帮助我使用java API实现上述查询,我将不胜感激。

共有1个答案

储嘉悦
2023-03-14

我不确定ES版本6.0.1。我正在使用ES 7.9.0版

这对我有用。

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();
 类似资料:
  • 我们正在AWS上运行elasticsearch,目前支持elasticsearch 6.3作为最新版本。 我们有一个业务案例,需要每天更新索引中的所有文档并删除一个嵌套对象。elasticsearch通过查询API进行了更新,这将解决我们的问题。 但在我们的java应用程序中,我们使用的是java高级rest客户端。rest客户端版本6.5支持按查询更新api。现在,如果我们将rest客户端升级到

  • 我正在尝试从ElasticSearch 2过渡到5或6。我想我想直接跳到6.1.1并使用RestHighLevelClient,因为它比低级rest客户端更接近我正在使用的现有传输客户端。 但是,我遇到了一个问题作为集成测试的一部分,我正在创建索引并插入特定数据,因此我知道我的查询是正确的。我似乎无法在High Level客户端中做到这一点。特别是,我希望能够调用: 但是,client.indic

  • CSS很强大的一点是,它具有很强的向前兼容性:如果浏览器不识别某个属性或值,它会忽略这个声明;如果不识别某个选择器,它会忽略整个规则。 这意味着新的选择器、属性和值,不会对老的浏览器产生严重影响。因此,设计师就可以大胆的应用CSS3的高级规则和声明,而不必担心老浏览器是否能够识别。 事实上,这些高级规则确实给设计带来极大的便利,设计师都迫不及待的要使用它,并且希望它们在老的浏览器中,和现代浏览器中

  • 如果有人能告诉我一种使用REST高级客户端或JAVA中的任何其他方式从JAVA执行时间点API请求的方法,这将非常有用,Elasticsearch 7.10.1中新引入了该方法。(传输客户端除外,因为它将很快被弃用)

  • 嗨,我正在尝试通过rest高级客户端使用弹性搜索reindex api,并比较两种方法 Rest API: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#docs-reindex任务api[![Rest api文档截图][1][1]

  • 使用Elasticsearch原生Java客户端API()的应用程序升级到使用Java高级REST客户端的路径是什么? 文件(初步?)似乎表明: Java高级REST客户端依赖于Elasticsearch核心项目。它接受与TransportClient相同的请求参数,并返回相同的响应对象。 (来源:https://www.elastic.co/guide/en/elasticsearch/clie