java - 基于响应中分数的 Elasticsearch 查询

标签 java jakarta-ee elasticsearch lucene querydsl

当有多个记录匹配查询时,我们可以查询 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": {}
}

最佳答案

您可以查看top-hits aggregation 。也许这会对您的用例有所帮助:)

关于java - 基于响应中分数的 Elasticsearch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020437/

相关文章:

java - 监听器垃圾收集说明(Java/Android)

java - 自动装箱拆箱操作符 (!=) 和 (==) 的区别

elasticsearch - 使用 puppet 运行 elasticsearch 时出错

java - 如何为 JSF 类编写 Arquillian 测试

java - 取决于当前记录的主体的验证规则

elasticsearch - Elastic Search重新索引套接字超时后,我可以连续重新索引该过程吗

elasticsearch - ElasticSearch 6.8不会先按完全匹配进行排序

java - SimpleMessageListenerContainer - 从失败中恢复

java - 如何在 Android 中为按钮文本使用两种不同的字体大小?

jakarta-ee - 在 TomEE 中使用 Weld CDI 代替 OpenWebBeans