我是靠谱客的博主 暴躁便当,最近开发中收集的这篇文章主要介绍ES(Elasticsearch)索引管理(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.创建一个索引

PUT /localhost:9200/
{
"fq_goods_index": {
"mappings": {
"goods_fq": {
"properties": {
"MonthlyPrice": {
"type": "float"
},
"createTime": {
"type": "long"
},
"displayChannel": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"gmvScore": {
"type": "integer"
},
"merchantNo": {
"type": "keyword"
}
}
}
}
}
}

2.删除一个索引

用以下的请求来 删除索引:

DELETE /my_index

你也可以这样删除多个索引:

DELETE /index_one,index_two
DELETE /index_*

你甚至可以这样删除 全部 索引:

DELETE /_all
DELETE /*

对一些人来说,能够用单个命令来删除所有数据可能会导致可怕的后果。如果你想要避免意外的大量删除, 你可以在你的 elasticsearch.yml 做如下配置:

action.destructive_requires_name: true

这个设置使删除只限于特定名称指向的数据, 而不允许通过指定 _all 或通配符来删除指定索引库。

3.索引设置

你可以通过修改配置来自定义索引行为

number_of_shards

每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。

number_of_replicas

每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。

例如,我们可以创建只有 一个主分片,没有副本的小索引:

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
}

4.配置分析器

第三个重要的索引设置是 analysis 部分,用来配置已存在的分析器或针对你的索引创建新的自定义分析器

在 分析与分析器 ,我们介绍了一些内置的分析器,用于将全文字符串转换为适合搜索的倒排索引。

standard 分析器是用于全文字段的默认分析器,对于大部分西方语系来说是一个不错的选择。 它包括了以下几点:

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

4.1自定义分析器

虽然Elasticsearch带有一些现成的分析器,然而在分析器上Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。

在 分析与分析器 我们说过,一个 分析器 就是在一个包里面组合了三种函数的一个包装器, 三种函数按照顺序被执行:

字符过滤器

字符过滤器 用来 整理 一个尚未被分词的字符串。例如,如果我们的文本是HTML格式的,它会包含像 <p> 或者 <div> 这样的HTML标签,这些标签是我们不想索引的。我们可以使用 html清除 字符过滤器 来移除掉所有的HTML标签,并且像把 &Aacute; 转换为相对应的Unicode字符 Á 这样,转换HTML实体。

一个分析器可能有0个或者多个字符过滤器。

分词器

一个分析器 必须 有一个唯一的分词器。 分词器把字符串分解成单个词条或者词汇单元。 标准 分析器里使用的 标准 分词器 把一个字符串根据单词边界分解成单个词条,并且移除掉大部分的标点符号,然而还有其他不同行为的分词器存在。

例如, 关键词 分词器 完整地输出 接收到的同样的字符串,并不做任何分词。 空格 分词器 只根据空格分割文本 。 正则 分词器 根据匹配正则表达式来分割文本 。

词单元过滤器

经过分词,作为结果的 词单元流 会按照指定的顺序通过指定的词单元过滤器 。

词单元过滤器可以修改、添加或者移除词单元。我们已经提到过 lowercase 和 stop 词过滤器 ,但是在 Elasticsearch 里面还有很多可供选择的词单元过滤器。 词干过滤器 把单词 遏制 为 词干。 ascii_folding 过滤器移除变音符,把一个像 "très" 这样的词转换为 "tres" 。 ngram 和 edge_ngram 词单元过滤器 可以产生 适合用于部分匹配或者自动补全的词单元。

4.2创建一个自定义分析器

和我们之前配置 es_std 分析器一样,我们可以在 analysis 下的相应位置设置字符过滤器、分词器和词单元过滤器:

PUT /my_index
{
"settings": {
"analysis": {
"char_filter": { ... custom character filters ... },
"tokenizer":
{ ...
custom tokenizers
... },
"filter":
{ ...
custom token filters
... },
"analyzer":
{ ...
custom analyzers
... }
}
}
}
PUT /my_index
{
"settings": {
"analysis": {
"char_filter": {
"&_to_and": {
"type":
"mapping",
"mappings": [ "&=> and "]
}},
"filter": {
"my_stopwords": {
"type":
"stop",
"stopwords": [ "the", "a" ]
}},
"analyzer": {
"my_analyzer": {
"type":
"custom",
"char_filter":
[ "html_strip", "&_to_and" ],
"tokenizer":
"standard",
"filter":
[ "lowercase", "my_stopwords" ]
}}
}}}

这个分析器现在是没有多大用处的,除非我们告诉 Elasticsearch在哪里用上它。我们可以像下面这样把这个分析器应用在一个 string 字段上:

PUT /my_index/_mapping/my_type
{
"properties": {
"title": {
"type":
"string",
"analyzer":
"my_analyzer"
}
}
}

备注:文章参考Elasticsearch: 权威指南

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index-management.html

 

最后

以上就是暴躁便当为你收集整理的ES(Elasticsearch)索引管理(一)的全部内容,希望文章能够帮你解决ES(Elasticsearch)索引管理(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部