使用elasticsearchOperation得到的查询结果与使用curl得到的结果不同

问题描述 投票:0回答:1

我目前正在尝试使用

spring-data-elasticsearch
elasticSearchOperations
查询某些索引,使用以下查询:

        val index = IndexCoordinates.of("test-*-en")

        val searchQuery = NativeSearchQueryBuilder()
            .withFilter(
                QueryBuilders.boolQuery()
                    .must(QueryBuilders.matchQuery("english","test query : 12345678"))
            ).withMaxResults(30)
            .build()

        return elasticsearchOperations.search(searchQuery, TestEsDocument::class.java, index)

但是,我观察到,尽管使用完全相同的查询,但与通过curl 获得的结果相比,获得的查询结果存在差异。我怀疑出现这种差异的原因是,在使用 esSearchOperations 进行搜索时,分数较高的文档并未被优先考虑。

我已经包含了curl查询以供参考:

POST test-*-en/_search?size=30
{
  "query": 
    {
  "bool" : {
    "must" : [
      {
        "match" : {
          "english" : {
            "query" : "test query : 12345678",
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : true,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : true,
            "boost" : 1.0
          }
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}
}

虽然不确定,但我怀疑问题可能在于elasticsearchOperation没有准确地从elasticSearch读取分数,如提供的屏幕截图所示。

不幸的是,我只能使用 es 版本

7.10.1-oss
并且无法升级,因此我使用
spring-data-elasticsearch:4.2.12
,使用以下选项在内部将
elasticsearch.version
设置为
7.10.1

extra["elasticsearch.version"] = "7.10.1"

您能否告知此问题是否是由于

spring-data-elasticsearch
和我的 Elasticsearch 集群之间的版本不匹配引起的,以及是否可以解决此问题?或者,我是否应该考虑更改查询请求以使用定制的 WebClient Post 请求?

提前非常感谢!

elasticsearch spring-data-elasticsearch
1个回答
0
投票

Spring Data Elasticsearch 返回得分最高的结果中的 30 个(最高得分为 1.0),您会得到其中的 30 个,但您没有指定排序顺序。通过curl返回的,它们的分数相同吗?

编辑:

我刚刚看到在你的java代码中你添加了查询作为过滤器。因此,您将首先获得获取所有数据而不进行任何评分的结果,然后将它们通过过滤器。将查询添加为查询而不是过滤器。

© www.soinside.com 2019 - 2024. All rights reserved.