基于响应中得分的弹性搜索查询

时间:2016-05-04 06:49:58

标签: java java-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": {}
}

1 个答案:

答案 0 :(得分:2)

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