ElasticSearch系列文章三 ElasticSearch的基本操作

ElasticSearch 基本操作

集群健康
GET /_cluster/health

cluster-health 会返回一个 JSON 响应
ElasticSearch系列文章三 ElasticSearch的基本操作_第1张图片

{
  "cluster_name" : "demeter-elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 3,
  "active_shards" : 3,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

这里主要看一下status字段,状态有三个值 green、yellow、red

green

​ 所有的主分片和副本父分片都已分配,集群100%可用。

yellow

​ 所有的主分片已经分片,但至少还有一个副本分片是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过高可用性在某种程度上被弱化。如果更多的分片消失,就会丢数据。

red

​ 至少一个主分片(以及它的全部副本)都在丢失中。搜索只能返回部分数据,而分配到这个分片的写入请求会返回一个异常。

  • number_of_nodesnumber_of_data_nodes 这个命名完全是自描述的。
  • active_primary_shards 指出你集群中的主分片数量。这是涵盖了所有索引的汇总值。
  • active_shards 是涵盖了所有索引的所有分片的汇总值,即包括副本分片。
  • relocating_shards 显示当前正在从一个节点迁往其他节点的分片的数量。通常来说应该是 0,不过在 Elasticsearch 发现集群不太均衡时,该值会上涨。比如说:添加了一个新节点,或者下线了一个节点。
  • initializing_shards 是刚刚创建的分片的个数。比如,当你刚创建第一个索引,分片都会短暂的处于 initializing 状态。这通常会是一个临时事件,分片不应该长期停留在 initializing 状态。你还可能在节点刚重启的时候看到 initializing 分片:当分片从磁盘上加载后,它们会从 initializing 状态开始。
  • unassigned_shards 是已经在集群状态中存在的分片,但是实际在集群里又找不着。通常未分配分片的来源是未分配的副本。比如,一个有 5 分片和 1 副本的索引,在单节点集群上,就会有 5 个未分配副本分片。如果你的集群是 red 状态,也会长期保有未分配分片(因为缺少主分片)。
索引的基本操作

创建索引

number_of_shards:分片数

number_of_replicas:副本数

PUT /index_test
{
    "settings": {
        "index": {
            "number_of_shards": "2",
            "number_of_replicas": "0"
        }
    }
}

ElasticSearch系列文章三 ElasticSearch的基本操作_第2张图片
ElasticSearch系列文章三 ElasticSearch的基本操作_第3张图片

查看索引

GET _cat/indices?v

在这里插入图片描述

删除索引

DELETE /index_test

创建索引的同时创建mappings映射

PUT /index_mapping
{
    "mappings": {
        "properties": {
            "realname": {
                "type": "text",
                "index": true
             },
            "username": {
                "type": "keyword",
                "index": false
            }
        }
    }
}

ElasticSearch系列文章三 ElasticSearch的基本操作_第4张图片
ElasticSearch系列文章三 ElasticSearch的基本操作_第5张图片
index默认true,设置为false的话,name这个字段就不会被索引。

某个属性一旦被建立,就不能修改了,但是可以新增额外属性

ElasticSearch系列文章三 ElasticSearch的基本操作_第6张图片
在这里插入图片描述
主要数据类型

  • text, keyword, string

  • long, integer, short, byte

  • double, float

  • boolean

  • date

  • object

  • 数组不能混,类型一致

keyword:不会被分词,不会被倒排索引,直接匹配搜索。

text:可以被倒排索引。

文档的基本操作

添加

POST /my_doc/_doc/1 -> {索引名}/_doc/{索引ID}(是指索引在es中的id,而不是这条记录的id,比如记录的id从数据库来是1001,并不是这个。如果不写,则自动生成一个字符串。建议和数据id保持一致>
POST /my_doc/_doc/1001
{
  "id": 1001,
  "name": "test",
  "desc": "nice to meet you",
  "create_date": "2020-02-22"
}

ElasticSearch系列文章三 ElasticSearch的基本操作_第7张图片

在es中并没有my_doc这个索引,索引也没有手动建立mappings,但是在插入文档时会创建索引,并且会根据文档类型自动设置属性类型,这个就是es的动态映射,在index索引库中去建立数据结构的相关配置信息。

ElasticSearch系列文章三 ElasticSearch的基本操作_第8张图片
发现name、desc字段会有fields属性,

  • “fields”: {“type”: “keyword”}:对一个字段设置多种索引模式,使用text类型做全文索引,也可使用keyword做聚合和排序。
  • “ignore_above” : 256:设置字段索引和存储的长度最大值,超过则被忽略

修改

  • 局部

    POST /my_doc/_doc/1001/_update
    {
      "doc": {
        "name": "demeter"
      }
    }
    

ElasticSearch系列文章三 ElasticSearch的基本操作_第9张图片

  • 全局

    PUT /my_doc/_doc/1001
    {
      "id": 1001,
      "name": "demeter-put",
      "desc": "no problem",
      "create_date": "2020-02-23"
    }
    

ElasticSearch系列文章三 ElasticSearch的基本操作_第10张图片

每次更新之后 version会修改

删除

DELETE /my_doc/_doc/1001
  • 文档删除不是立即删除,文档还是保存在磁盘上,索引增长越来越多,才会把那些曾经标识过删除的,进行清理,从磁盘上移出去。

查询

查看单一文档

GET /my_doc/_doc/1001

ElasticSearch系列文章三 ElasticSearch的基本操作_第11张图片

查询全部文档

GET /my_doc/_doc/_search

ElasticSearch系列文章三 ElasticSearch的基本操作_第12张图片

元数据

  • index:文档数据所属那个索引,理解为数据库的某张表即可。
  • type:文档数据属于哪个类型,新版本使用**_doc**。
  • _id:文档数据的唯一标识,类似数据库中某张表的主键。可以自动生成或者手动指定。
  • score:查询相关度,是否契合用户匹配,分数越高用户的搜索体验越高。
  • version:版本号。
  • source:文档数据,json格式。

定制结果集

GET /my_doc/_doc/1001?_source=id,name
GET /my_doc/_doc/_search?_source=id,name

判断文档是否存在

HEAD /my_doc/_doc/1001
乐观锁

Elasticsearch是分布式的。创建,更新或删除文档时,必须将文档的新版本复制到群集中的其他节点。Elasticsearch也是异步和并发的,这意味着这些复制请求是并行发送的,并且可能不按顺序到达其目的地。Elasticsearch需要一种方法来确保文档的旧版本永远不会覆盖新版本。

在创建一个文档时,并为其分配 _seq_no_primary_term

ElasticSearch系列文章三 ElasticSearch的基本操作_第13张图片

两个客户端同时更新一个文档,第一个人根据文档当前的 _seq_no 和 _primary_term 去更新文档,更新成功,同时文档的 _seq_no 和 _primary_term 会增加;如果此时第二个人用增加前的 _seq_no 和 _primary_term 尝试更新文档,会失败;当更新失败的时候,就需要程序去处理更新失败的问题;通过这种机制,保证并发写的正确性;
ElasticSearch系列文章三 ElasticSearch的基本操作_第14张图片
ElasticSearch系列文章三 ElasticSearch的基本操作_第15张图片

内置分词器

分词

把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。

英文示例:

POST /_analyze
{
  "analyzer": "standard",
  "text": "php is the best language in the world"
}

ElasticSearch系列文章三 ElasticSearch的基本操作_第16张图片
中文示例:

POST /_analyze
{
  "analyzer": "standard",
  "text": "德墨忒尔"
}

ElasticSearch系列文章三 ElasticSearch的基本操作_第17张图片

es的内置分词器

  • standard:默认分词,单词会被拆分,大小会转换为小写。

  • simple:按照非字母分词。大写转为小写。

  • whitespace:按照空格分词。忽略大小写。

  • stop:去除无意义单词,比如the/a/an/is

  • keyword:不做分词。把整个文本作为一个单独的关键词。

中文分词器

github地址:https://github.com/medcl/elasticsearch-analysis-ik

将elasticsearch-analysis-ik-7.6.0.zip安装包上传到 /home/software 解压/usr/local/elasticsearch-7.6.0/plugins/ik即可

unzip elasticsearch-analysis-ik-7.6.0.zip -d /usr/local/elasticsearch-7.6.0/plugins/ik

若没有unzip命令 先安装unzip

yum install -y unzip zip

ik中文分词有两种分词器

  • ik_max_word: 会将文本做最细粒度的拆分

  • ik_smart: 会做最粗粒度的拆分

    ik_max_word会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”

    ik_smart会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”

自定义中文词库

  • 在{es}/plugins/ik/config下,创建:
vim custom.dic
  • 添加自定义词语

    德墨忒尔
    很方
    
  • 配置自定义扩展词典

    vim /usr/local/elasticsearch-7.6.0/plugins/ik/config/IKAnalyzer.cfg.xml
    
    
    
    
            IK Analyzer 扩展配置
            
            custom.dic
             
            
            
            
            
            
    
    
  • 重启es

ElasticSearch系列文章三 ElasticSearch的基本操作_第18张图片

你可能感兴趣的:(ElasticSearch)