【发布时间】:2016-05-04 06:49:57
【问题描述】:
当有多条记录匹配查询时,我们是否可以查询 ES 以仅返回响应中得分最高的一个结果?
如果有任何示例查询,请告诉我。谢谢。
示例响应/文档:- 我使用类似搜索。 截至目前,我的服务返回以下记录。
record1 - product1, value1, score=1.5
record2 - product1, value2, score=1.4
record3 - product2, value1, score=1.7
record4 - product2, value2, score=0.8
record5 - product3, value1, score=1.2
我想要只包含以下记录的结果,这将根据分数过滤产品。每个产品只有一条记录。
record1 - product1, value1, score=1.5
record3 - product2, value1, score=1.7
record5 - product3, value1, score=1.2
更多细节:- 创建了一个自定义分析器:-
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete": {
"filter": [
"autocomplete_filter"
],
"type": "custom",
"tokenizer": "keyword"
}
}
}
映射:-
"PRODUCT_ID": {
"analyzer": "autocomplete",
"type": "string"
}
查询:-
{
"query": {
"bool": {
"must": [
{
"term": {
"PRODUCT_ID": "CON-HSH-AS"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 10,
"sort": [],
"aggs": {}
}
【问题讨论】:
-
请添加一些你尝试过的代码???
-
有可能。使用
"size":1,默认情况下,它只会给你一个应该有最高分数的文档。文档默认按分数排序,所以如果您没有更改排序机制,"size": 1就足够了。 -
size:1.. 在任何情况下都只会返回文档。但我的用例不同..
-
您需要提供更多详细信息:索引的映射、示例文档以及您现在使用的完整查询。
-
更新了细节..
标签: java jakarta-ee elasticsearch lucene querydsl