ElasticSearch查看已经存在的文档保存在哪个分片

比如我有以下的文档:

{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 5,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "mydoc",
        "_id" : "XxyrM2kBVzdNcvl_GHv2",
        "_score" : 1.0,
        "_source" : {
          "name" : "Shiled",
          "twitter" : "Sonny sql is awesome",
          "date" : "2018-12-27",
          "id" : 1240,
          "tags" : [
            "red",
            "shit"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "mydoc",
        "_id" : "YByrM2kBVzdNcvl_tnvm",
        "_score" : 1.0,
        "_source" : {
          "name" : "YYerk",
          "twitter" : "sql is awesome",
          "date" : "2008-12-27",
          "id" : 12357,
          "tags" : [
            "red"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "mydoc",
        "_id" : "7777",
        "_score" : 1.0,
        "_source" : {
          "name" : "Rocky Chen",
          "twitter" : "sql is awesome",
          "date" : "2008-12-27",
          "id" : 9999
        }
      },
      {
        "_index" : "test",
        "_type" : "mydoc",
        "_id" : "YhzDN2kBVzdNcvl_enuT",
        "_score" : 1.0,
        "_source" : {
          "name" : "YYerk",
          "twitter" : "sql is awesome",
          "date" : "2008-12-27",
          "id" : 888888,
          "tags" : [
            "red",
            "green"
          ]
        }
      },
      {
        "_index" : "test",
        "_type" : "mydoc",
        "_id" : "YxzDN2kBVzdNcvl_u3th",
        "_score" : 1.0,
        "_source" : {
          "name" : "YYerk",
          "twitter" : "sql is awesome",
          "date" : "2008-12-27",
          "id" : 888888,
          "tags" : [
            "red",
            "green"
          ]
        }
      }
    ]
  }
}

如果我想看看id是  "_id" : "YxzDN2kBVzdNcvl_u3th",

这个文档是保存在哪个分片,如何查看?

 

引用:

路由一个文档到一个分片中编辑

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片 1 还是分片 2 中呢?

首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:

shard = hash(routing) % number_of_primary_shards

routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过 hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到 余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

 

那么可以使用

GET test/_search_shards?routing=ID号

 来查看你要查询的id所在的分片

得到的结果:

{
  "nodes" : {
    "yl-qYmh1SXqzJsfI4d1ddw" : {
      "name" : "node-3",
      "ephemeral_id" : "UsJ9rFELTiCW07oHE9YMdg",
      "transport_address" : "10.18.6.26:9300",
      "attributes" : {
        "ml.machine_memory" : "6088101888",
        "rack" : "r1",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "ml.enabled" : "true"
      }
    },
    "wT7wUd3iTkujYUsbVNVv-w" : {
      "name" : "node-1",
      "ephemeral_id" : "fP-vgSb0SdemnHDyaJUsWw",
      "transport_address" : "10.18.6.102:9300",
      "attributes" : {
        "ml.machine_memory" : "8256720896",
        "rack" : "r1",
        "xpack.installed" : "true",
        "ml.max_open_jobs" : "20",
        "ml.enabled" : "true"
      }
    }
  },
  "indices" : {
    "test" : { }
  },
  "shards" : [
    [
      {
        "state" : "STARTED",
        "primary" : true,
        "node" : "wT7wUd3iTkujYUsbVNVv-w",
        "relocating_node" : null,
        "shard" : 1,
        "index" : "test",
        "allocation_id" : {
          "id" : "k-8E4dL7QmGgwcsNsUCP6Q"
        }
      },
      {
        "state" : "STARTED",
        "primary" : false,
        "node" : "yl-qYmh1SXqzJsfI4d1ddw",
        "relocating_node" : null,
        "shard" : 1,
        "index" : "test",
        "allocation_id" : {
          "id" : "lvOpQIKgRUibkulr3nRfEw"
        }
      }
    ]
  ]
}

只需要关注shards字段就可以,从上面可以看到,该文档存在shard 1 主分片上。

 

原文链接:

http://30daydo.com/article/493

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux上优化Elasticsearch索引文件,可以按照以下步骤进行操作: 1. 进入Elasticsearch的配置文件目录: ``` cd /opt/app/elasticsearch/config/ ``` 2. 打开Elasticsearch的配置文件elasticsearch.yml: ``` vi elasticsearch.yml ``` 3. 根据需要进行以下优化配置: - 修改索引存储路径: 在elasticsearch.yml文件中找到`path.data`配置项,将其指定为一个性能较好的存储路径,例如: ``` path.data: /opt/app/elasticsearch/data ``` - 调整内存分配: 在elasticsearch.yml文件中找到`-Xms`和`-Xmx`配置项,分别表示Elasticsearch的最小和最大堆内存大小。根据服务器的内存情况,可以适当调整这两个值,以提高性能。例如: ``` -Xms2g -Xmx4g ``` - 调整线程池大小: 在elasticsearch.yml文件中找到`thread_pool`配置项,可以根据需要调整各个线程池的大小,以适应并发查询和索引的需求。 4. 保存并关闭elasticsearch.yml文件。 5. 重启Elasticsearch服务,使配置生效。 请注意,以上是一些常见的优化配置,具体的优化策略还需要根据实际情况进行调整。另外,优化Elasticsearch索引文件还可以考虑其他方面,如分片设置、缓存配置等,具体的优化策略可以参考Elasticsearch官方文档或相关资料。 #### 引用[.reference_title] - *1* *2* *3* [Linux部署elasticsearch和迁移数据详细教程](https://blog.csdn.net/qq_39221436/article/details/124397172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值