如何在ElasticSearch中以随机顺序创建2个组

时间:2014-08-10 15:07:01

标签: elasticsearch

例如,在google.com中,有2种类型的搜索结果,1。与关键字相关的广告和2.正常搜索结果。

如何使用具有以下条件的弹性搜索

  1. 在搜索结果的前3位中按用户ID显示3个广告位的广告
  2. 显示也由userid随机搜索的正常搜索结果
  3. 如何制作单个查询以将这两个条件整合到搜索结果中。

    给定样本数据,用'a'查询然后它应该随机返回(支付1-3)然后随机跟随(正常4-6)

    {"type" : "paid", "document" : "paid random 1"}
    {"type" : "paid", "document" : "paid random 2"}
    {"type" : "paid", "document" : "paid random 3"}
    {"type" : "normal", "document" : "normal random 4"}
    {"type" : "normal", "document" : "normal random 5"}
    {"type" : "normal", "document" : "normal random 6"}
    

1 个答案:

答案 0 :(得分:0)

你看着你的问题, 我想你正在尝试获取文件。

  1. 基于付费金额的前三个随机文件
  2. 前三个随机文件(默认)
  3. 所以,我设法向你提出要求, 我使用了top_hits聚合,

    这是请求,

    curl -XPOST "http://localhost:9200/x3/_search" -d'
    {
       "query": {
          "match": {
             "doc": "xxx"
          }
       },
       "aggs": {
          "tophits_random_paid": {
             "top_hits": {
                "from": 0,
                "size": 3,
                "sort": [
                   {
                      "paidAmount": {
                         "order": "desc"
                      }
                   },
                   {
                      "_script": {
                         "script": "(doc[\"userid\"].value + salt).hashCode()",
                         "type": "number",
                         "params": {
                            "salt": "some_random_string"
                         },
                         "order": "asc"
                      }
                   }
                ]
             }
          },
          "tophits_random_default": {
             "top_hits": {
                "from": 0,
                "size": 3,
                "sort": [
                   {
                      "_script": {
                         "script": "(doc[\"userid\"].value + salt).hashCode()",
                         "type": "number",
                         "params": {
                            "salt": "some_random_string"
                         },
                         "order": "asc"
                      }
                   }
                ]
             }
          }
       }
    }'
    

    谢谢,希望这有助于!!。