【问题标题】:Elastic search query based on score in the response基于响应分数的弹性搜索查询
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2017-09-07
    • 2019-04-24
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多