11-shared-index-routing开始

shared index

我们可以考虑采用一个大的集群来放这些数据,然后通过一个标记来filter这些数据

PUT /forums

{

  "settings": {

    "number_of_shards": 10 

  },

  "mappings": {

    "post": {

      "properties": {

        "forum_id": { 

          "type":  "string",

          "index": "not_analyzed"

        }

      }

    }

  }

}


PUT /forums/post/1

{

  "forum_id": "baking", 

  "title":    "Easy recipe for ginger nuts",

  ...

}

我们可以使用forum_id 作为filter搜索单独的forum,这个filter将排除其他文档,并且filter将cache,保证response的快速

GET /forums/post/_search

{

  "query": {

    "filtered": {

      "query": {

        "match": {

          "title": "ginger nuts"

        }

      },

      "filter": {

        "term": { 

          "forum_id": {

            "baking"

          }

        }

      }

    }

  }

}



这个方法起作用了,但每次系统做这样的事情的时候得先对所有的shard进行filter(也就是说数据分别放在不同的shard上了),这样的效率还不是最好。

在routing a Document to a shard中我们阐述了一个文档被分配到了一个特殊的shard上。

shard = hash(routing) % number_of_primary_shards

routing的默认值就是_id,但是我们可以重载这个值,变为我们自己的值,例如forum_id,所有的文档通过routing被routing到相同的shard上

PUT /forums/post/1?routing=baking 

{

  "forum_id": "baking", 

  "title":    "Easy recipe for ginger nuts",

  ...

}


当我们进行查询的时候我们可以通过设置routing值去确保所有的搜索请求都指向了这个shard(是否可以考虑现在index 加入这个值,search先不加,慢慢转化)

GET /forums/post/_search?routing=baking 

{

  "query": {

    "filtered": {

      "query": {

        "match": {

          "title": "ginger nuts"

        }

      },

      "filter": {

        "term": { 

          "forum_id": {

            "baking"

          }

        }

      }

    }

  }

}


多个routing请求

GET /forums/post/_search?routing=baking,cooking,recipes

{

  "query": {

    "filtered": {

      "query": {

        "match": {

          "title": "ginger nuts"

        }

      },

      "filter": {

        "terms": {

          "forum_id": {

            [ "baking", "cooking", "recipes" ]

          }

        }

      }

    }

  }

}


这种办法是非常高效的,但感觉有点笨拙。因为每个请求都得加routing和term filter请求,index  aliases来解决这个问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值