elasticsearch阅读官方文档笔记

 技术上来讲,一个主分片最大可以存储 Integer.MAX_VALUE - 128 个文档,可是实际最大值还须要参考你的使用场景:包括你使用的硬件, 文档的大小和复杂程度,索引和查询文档的方式以及你指望的响应时长。html

在 Elasticsearch 中, 每一个字段的全部数据 都是 默认被索引的 。 即每一个字段都有为了快速检索设置的专用倒排索引。并且,不像其余多数的数据库,它能在 相同的查询中 使用全部这些倒排索引,并以惊人的速度返回结果。web

 全部须要咱们作的就是选择一个索引名,这个名字必须小写,不能如下划线开头,不能包含逗号。 数据库

注解:index不能是大写,不然没法将数据加入到ES中。json

一个type 命名能够是大写或者小写,可是不能如下划线或者句号开头,不该该包含逗号, 而且长度限制为256个字符. 数组

自定义type和id,输入的请求应该是put开头:app

PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}

 若是使用自动生成id,输入的请求是post开头:elasticsearch

POST /website/blog/
{
  "title": "My second blog entry",
  "text":  "Still trying this out...",
  "date":  "2014/01/01"
}

若是你的数据没有天然的 ID, Elasticsearch 能够帮咱们自动生成 ID 。 请求的结构调整为: 再也不使用PUT 谓词(“使用这个 URL 存储这个文档”), 而是使用 POST 谓词(“存储文档在这个 URL 命名空间下”)。分布式

put是有幂等性,而post是非幂等性,换句话说,屡次执行put,返回的结果必定相同。ide

在 Elasticsearch 中文档是 不可改变 的,不能修改它们。 相反,若是想要更新现有的文档,须要 重建索引或者进行替换;update API, 这个 API 能够用于 partial updates to a document 。 虽然它彷佛对文档直接进行了修改,但实际上 Elasticsearch 执行如下过程:post

  1. 从旧文档构建 JSON
  2. 更改该 JSON
  3. 删除旧文档
  4. 索引一个新文档

 update的做用是仅仅将这些流程合在了一块儿。

在分布式系统中深度分页

理解为何深度分页是有问题的,咱们能够假设在一个有 5 个主分片的索引中搜索。 当咱们请求结果的第一页(结果从 1 到 10 ),每个分片产生前 10 的结果,而且返回给 协调节点 ,协调节点对 50 个结果排序获得所有结果的前 10 个。

如今假设咱们请求第 1000 页--结果从 10001 到 10010 。全部都以相同的方式工做除了每一个分片不得不产生前10010个结果之外。 而后协调节点对所有 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。

能够看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的缘由。

 为了可以将时间域视为时间,数字域视为数字,字符串域视为全文或精确值字符串, Elasticsearch 须要知道每一个域中数据的类型。这个信息包含在映射中。

https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/mapping-intro.html 

该连接很准确的解释了mapping。mapping一旦定义,就没法改变。

考虑包含 内部对象的数组是如何被索引的。 假设咱们有个 followers 数组:

{
    "followers": [
        { "age": 35, "name": "Mary White"},
        { "age": 26, "name": "Alex Jones"},
        { "age": 19, "name": "Lisa Smith"}
    ]
}

这个文档会像咱们以前描述的那样被扁平化处理,结果以下所示:

{
    "followers.age":    [19, 26, 35],
    "followers.name":   [alex, jones, lisa, smith, mary, white]
}

{age: 35} 和 {name: Mary White} 之间的相关性已经丢失了,由于每一个多值域只是一包无序的值,而不是有序数组。这足以让咱们问,“有一个26岁的追随者?”

可是咱们不能获得一个准确的答案:“是否有一个26岁 名字叫 Alex Jones 的追随者?”

相关内部对象被称为 nested 对象,能够回答上面的查询

相关文章
相关标签/搜索