首页 > 解决方案 > 如何在spring boot中使用弹性搜索模板id(存储在ES集群中)获取结果

问题描述

我在我的 ES 中存储了一个弹性搜索模板,我们想通过传递所需的参数在 spring boot rest 高客户端弹性搜索中使用这个模板 ID

curl -X POST \
  http://localhost:9200/_scripts/my_template_id \
  -H 'content-type: application/json' \
  -d '{
        "script": {
            "lang": "mustache",
            "source": {
              "query": {
                "bool": {
                  "should": [
                    {
                      "match": {
                        "studentName": {
                          "query": "{{query_string}}",
                          "operator": "or",
                          "fuzziness": 0,
                          "boost": 9
                        }
                      }
                    },
                    {
                      "match": {
                        "studentId": {
                          "query": "{{query_string}}",
                          "operator": "or",
                          "fuzziness": 0,
                          "boost": 1
                        }
                      }
                    }
                  ]
                }
              },
              "from": "{{from_offset}}",
              "size": "{{result_size}}"
            }
          }
      }'

我已经尝试了多种方法来使用上面的模板 id 并获取 SearchResponse 来制作 QuerySourceBuilder 但我失败了,有什么建议为什么它失败或 spring boot 不支持这样的功能?

标签: javaelasticsearchspring-data-elasticsearchelasticsearch-aggregationelasticsearch-dsl

解决方案


Spring Data Elasticsearch (4.3) 的下一个版本将支持使用搜索模板进行搜索,使用NativeSearchQueryBuilderwhich then 将有一个方法withSearchTemplate(SearchTemplateRequestBuilder searchTemplateBuilder)

编辑 02.08.2021:

更深入地了解当前可用的内容后,我注意到将其放在上面NativeSearchQuery是错误的。我们将需要更改它以向ElasticseachOperations和 实现添加相应的方法。

因此,在 4.3 中会有一个解决方案,我将使用 sson 的详细信息更新此答案,因为它已实现。

编辑 29.10.2021:

不会在 4.3 中,我没有能力在 4.3 发布之前实现它,所以它会被推迟。


推荐阅读