ES索引管理


1索引设置

下面是两个最重要的设置
number_of_shards
每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
number_of_replicas
每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改
eg:

PUT /my_temp_index
{
    "settings": {
        "number_of_shards" :   1,
        "number_of_replicas" : 0
    }
}

然后,我们可以用 update-index-settings API 动态修改副本数:

PUT /my_temp_index/_settings
{
    "number_of_replicas": 1
}

配置分析器
第三个重要的索引设置是 analysis 部分, 用来配置已存在的分析器或针对你的索引创建新的自定义分析器。
用于将全文字符串转换为适合搜索的倒排索引。
standard 分析器是用于全文字段的默认分析器, 对于大部分西方语系来说是一个不错的选择。 它包括了以下几点:

standard 分词器,通过单词边界分割输入的文本。
standard 语汇单元过滤器,目的是整理分词器触发的语汇单元(但是目前什么都没做)。
lowercase 语汇单元过滤器,转换所有的语汇单元为小写。
stop 语汇单元过滤器,删除停用词–对搜索相关性影响不大的常用词,如 a , the , and , is。

2类型和映射

类型 在 Elasticsearch 中表示一类相似的文档。 类型由 名称 —比如 user 或 blogpost —和 映射 组成。

映射, 就像数据库中的 schema ,描述了文档可能具有的字段或 属性 、 每个字段的数据类型—比如 string, integer 或 date —以及Lucene是如何索引和存储这些字段的。

类型可以很好的抽象划分相似但不相同的数据。但由于 Lucene 的处理方式,类型的使用有些限制。

  • 核心简单域类型
    Elasticsearch 支持 如下简单域类型:

字符串: string
整数 : byte, short, integer, long
浮点数: float, double
布尔型: boolean
日期: date

  • 查看映射
    通过 /_mapping ,我们可以查看 Elasticsearch 在一个或多个索引中的一个或多个类型的映射 。在 开始章节 ,我们已经取得索引 gb 中类型 tweet 的映射:
GET /gb/_mapping/tweet
{
   "gb": {
      "mappings": {
         "tweet": {
            "properties": {
               "date": {
                  "type": "date",
                  "format": "strict_date_optional_time||epoch_millis"
               },
               "name": {
                  "type": "string"
               },
               "tweet": {
                  "type": "string"
               },
               "user_id": {
                  "type": "long"
               }
            }
         }
      }
   }
}
  • index
    index 属性控制怎样索引字符串。它可以是下面三个值:

    • analyzed
      首先分析字符串,然后索引它。换句话说,以全文索引这个域。
    • not_analyzed
      索引这个域,所以它能够被搜索,但索引的是精确值。不会对它进行分析。
    • no
      不索引这个域。这个域不会被搜索到。
      string 域 index 属性默认是 analyzed 。如果我们想映射这个字段为一个精确值,我们需要设置它为 not_analyzed :
      {
      "tag": {
          "type":     "string",
          "index":    "not_analyzed"
      }
      

}
```

  • analyszer
    对于 analyzed 字符串域,用 analyzer 属性指定在搜索和索引时使用的分析器。默认, Elasticsearch 使用 standard 分析器, 但你可以指定一个内置的分析器替代它,例如 whitespace 、 simple 和 english
    {
    "tweet": {
        "type":     "string",
        "analyzer": "english"
    }
    

}
```

3根对象

映射的最高一层被称为 根对象 ,它可能包含下面几项:

  • properties

一个 properties 节点,列出了文档中可能包含的每个字段的映射

  • 元数据字段

各种元数据字段,它们都以一个下划线开头,例如 _type 、 _id 和 _source

  • 设置项

设置项,控制如何动态处理新的字段,例如 analyzer 、 dynamic_date_formats 和 dynamic_templates

  • 其他

其他设置,可以同时应用在根对象和其他 object 类型的字段上,例如 enabled 、 dynamic 和 include_in_all

4属性

  • type

字段的数据类型,例如 string 或 date

  • index

字段是否应当被当成全文来搜索( analyzed ),或被当成一个准确的值( not_analyzed ),还是完全不可被搜索( no )

  • analyzer

确定在索引和搜索时全文字段使用的 analyzer

5元数据

参考ES核心元数据

5动态映射

当 Elasticsearch 遇到文档中以前 未遇到的字段,它用 dynamic mapping 来确定字段的数据类型并自动把新的字段添加到类型映射。

有时这是想要的行为有时又不希望这样。通常没有人知道以后会有什么新字段加到文档,但是又希望这些字段被自动的索引。也许你只想忽略它们。如果Elasticsearch是作为重要的数据存储,可能就会期望遇到新字段就会抛出异常,这样能及时发现问题。

幸运的是可以用 dynamic 配置来控制这种行为 ,可接受的选项如下:

true
动态添加新的字段–缺省
false
忽略新的字段
strict
如果遇到新字段抛出异常
配置参数 dynamic 可以用在根 object 或任何 object 类型的字段上。你可以将 dynamic 的默认值设置为 strict , 而只在指定的内部对象中开启它, 例如:

PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic":      "strict", 
            "properties": {
                "title":  { "type": "string"},
                "stash":  {
                    "type":     "object",
                    "dynamic":  true 
                }
            }
        }
    }
}

把 dynamic 设置为 false 一点儿也不会改变 _source 的字段内容。 _source 仍然包含被索引的整个JSON文档。只是新的字段不会被加到映射中也不可搜索。

猜你喜欢

转载自blog.csdn.net/weixin_40161254/article/details/88692917