zoukankan      html  css  js  c++  java
  • 路由 允许数据按照一定的依据划分

     【均匀】

    默认,Elasticsearch会在所有索引的分片中均匀地分配文档;

    为了获得文档,es必须查询所有分片并合并结果

    【划分 路由】

     允许数据按照一定的依据划分(例如,客户端标识符),就可以使用一个强大的文档查询和分布控制机制:路由;

    简而言之,它允许选择用于索引和搜索数据的分片

    【文档标识符散列值】

    默认,es计算文档标识符的散列值,以此为基础将文档放置与一个可用的主分片上

    例如,将单个用户的所有文档放置于单个分片之中,并对此分片查询:操作便利,路由允许

    【可以再索引和查询时都指定路由值】

    例如,索引时使用userId值来设置路由,在搜索时也一样:对于相同的userId值,计算出的散列值是相同的,因而特定用户的

    所有文档被放置在相同的分片中;在搜索中使用相同的属性值,则只搜索当个分片而不是整个索引。

    路由值的数量或许比索引分片的数量多:一些不同的属性值可以指向相同的分片;如果无过滤,则得到的数据并非单个路由的,而是特定分片中所有的路由值。

    路由参数

    建立文档

    curl -XPUT 'http://localhost:9200/posts/post/1?routing=12' -d '{

    "id":"1",

    "name":"Test Document",

    "contents":"test",

    "userId":"12"

    }'

    查询文档

    curl -XGET 'http://localhost:9200/posts/_search?routing=12&q=userId:12'

    curl -XGET 'http://localhost:9200/posts/_search?routing=12,345&q=userId:12'

    路由字段

    为每个发送到es的请求指定路由值并不方便;

    在索引过程中,es允许指定一个字段,用该字段的值作为路由值,这样只需要在查询时候提供路由参数。

    "_routing":{

    "required":true,

    "path":"userId"

    }

    上述定义意味着需要提供路由值,否则索引请求失败。

    使用索引字段较使用路由参数,es需要使用一些额外的解析,因此相对慢。

  • 相关阅读:
    简单工厂模式
    单例模式
    Quartz.NET总结(三)Quartz 配置
    Quartz.NET总结(二)CronTrigger和Cron表达式
    ORACLE跨数据库查询的方法
    github使用个人总结
    ffmpeg 下载安装和简单应用
    Python 安装与环境变量配置
    Sublime text 3 汉化教程
    给大家分享两套WordPress收费主题
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9790786.html
Copyright © 2011-2022 走看看