我目前正在尝试使用
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 请求?
提前非常感谢!
Spring Data Elasticsearch 返回得分最高的结果中的 30 个(最高得分为 1.0),您会得到其中的 30 个,但您没有指定排序顺序。通过curl返回的,它们的分数相同吗?
编辑:
我刚刚看到在你的java代码中你添加了查询作为过滤器。因此,您将首先获得获取所有数据而不进行任何评分的结果,然后将它们通过过滤器。将查询添加为查询而不是过滤器。