根据ElasticSearch with Aggregation中的特定值提升搜索结果

时间:2015-10-06 10:22:52

标签: elasticsearch magento-1.9

我想将弹性搜索中的提升与结果的聚合相结合。 我的json查询用于显示搜索结果,并使用聚合进行分组,如下所示。

{
  "min_score": 0.5,
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      }
    }
  },
  "aggs": {
    "search_result": {
      "terms": {
        "field": "store_name.untouched",
        "size": 0
      },
      "aggs": {
        "search_result_second": {
          "top_hits": {
            "sort": {
              "store_name.untouched": {
                "order": "desc"
              }
            },
            "size": 3,
            "from": 0
          }
        }
      }
    },
    "all_stores": {
      "terms": {
        "field": "store_name.untouched",
        "size": 0
      }
    },
    "all_categories": {
      "terms": {
        "field": "category_name.untouched",
        "size": 0
      },
      "aggs": {
        "all_category_id": {
          "terms": {
            "field": "product_category_ids"
          }
        }
      }
    },
    "all_brands": {
      "terms": {
        "field": "brand.untouched",
        "size": 0
      }
    },
    "all_colors": {
      "terms": {
        "field": "color",
        "size": 0
      }
    },
    "min_price": {
      "min": {
        "field": "actual_price"
      }
    },
    "max_price": {
      "max": {
        "field": "actual_price"
      }
    }
  }
}

通过使用上面的查询,我得到每个商店的10个桶,其中每个商店的3个产品的分组。上面的查询的样本输出如下。

buckets: [10]
0:  {
key: "ABC"{
    0:{
        storename:ABC
        .
        .
        .

    }
    1:{
        storename:ABC
        .
        .
        .
    }
    2:{
        storename:ABC
        .
        .
        .
    }
}

1:  {
key: "EFG"{
    0:{
        storename:EFG
        .
        .
        .

    }
    1:{
        storename:EFG
        .
        .
        .
    }
    2:{
        storename:EFG
        .
        .
        .
    }
}

2:  {
key: "HIJ"{
    0:{
        storename:HIJ
        .
        .
        .

    }
    1:{
        storename:HIJ
        .
        .
        .
    }
    2:{
        storename:HIJ
        .
        .
        .
    }
}


.
.
.

unitill bucket 10 stores.

现在我想将Boost应用于特定商店,它必须始终位于搜索结果的第一位,然后剩下的商店将在稍后推出。当我查询弹性搜索。 所以,如果我想提升 storename = EFG ,那么结果json应该是。

buckets: [10]

0:  {
key: "EFG"{
    0:{
        storename:EFG
        .
        .
        .

    }
    1:{
        storename:EFG
        .
        .
        .
    }
    2:{
        storename:EFG
        .
        .
        .
    }
}

1:  {
key: "ABC"{
    0:{
        storename:ABC
        .
        .
        .

    }
    1:{
        storename:ABC
        .
        .
        .
    }
    2:{
        storename:ABC
        .
        .
        .
    }
}

2:  {
key: "HIJ"{
    0:{
        storename:HIJ
        .
        .
        .

    }
    1:{
        storename:HIJ
        .
        .
        .
    }
    2:{
        storename:HIJ
        .
        .
        .
    }
}


.
.
.

unitill bucket 10 stores.

使用elasticsearch是否有任何解决方案可以实现此结果。

0 个答案:

没有答案