如何根据搜索词查询索引并按字段值

时间:2016-12-10 12:12:48

标签: elasticsearch

我正在尝试找出以下方案的解决方案。

用户输入搜索字词(比如iPhone)。获取类别聚合的查询按count desc排序执行。这是为了知道每个类别对于给定搜索词有多少产品。一旦我得到这个,我需要执行'iphone'的实际搜索查询以获取匹配产品的列表,但我还需要提升我之前的聚合查询中收到的类别值。

e.g。 第一个聚合查询

GET /product/_search
{
  "size" : 0,
  "query" : {
    "multi_match" : {
      "query" : "iphone",
      "fields" : [
        "identity.name"
      ],
      "operator" : "and",
      "type": "most_fields"
    }
  },
  "aggs" : {
    "categories": {
      "terms": {
        "field": "description.categoryName.keyword" ,
        "size": 3
     }
   }
  }
}

RESPONSE

"aggregations": {
"categories": {
  "doc_count_error_upper_bound": 0,
  "sum_other_doc_count": 43,
  "buckets": [
    {
      "key": "iPhones",
      "doc_count": 55
    },
    {
      "key": "iPhone 6 & 6S Cases & Screen Protectors",
      "doc_count": 38
    },
    {
      "key": "iPhone 7 Cases & Screen Protectors",
      "doc_count": 38
    }
  ]
}
}

所以现在我的第二个问题是获得匹配'iphone'的产品应该具有最高的类别= iPhone的提升/重量,其次是category = iPhone 6& 6S案例&屏幕保护,然后类别= iPhone 7案例&屏幕保护程序,然后是其余结果

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是热门点击聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

您当前的条款聚合将为您提供相关类别和文档计数。然后你会使用顶部命中聚合作为子聚合,它将为你的查询提供匹配的命中,按分数(默认)排序,在你的分类桶中。