ElasticSearch系列文章三 ElasticSearc

2020-07-16  本文已影响0人  哭泣哭泣帕拉达

ElasticSearch 基本操作

集群健康
GET /_cluster/health

cluster-health 会返回一个 JSON 响应

在这里插入图片描述
{
  "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_shards:分片数

number_of_replicas:副本数

PUT /index_test
{
    "settings": {
        "index": {
            "number_of_shards": "2",
            "number_of_replicas": "0"
        }
    }
}
在这里插入图片描述
在这里插入图片描述

查看索引

GET _cat/indices?v
在这里插入图片描述

删除索引

DELETE /index_test

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

PUT /index_mapping
{
    "mappings": {
        "properties": {
            "realname": {
                "type": "text",
                "index": true
             },
            "username": {
                "type": "keyword",
                "index": false
            }
        }
    }
}
在这里插入图片描述
在这里插入图片描述

index默认true,设置为false的话,name这个字段就不会被索引。

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

在这里插入图片描述
在这里插入图片描述

主要数据类型

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"
}
在这里插入图片描述

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

在这里插入图片描述
发现name、desc字段会有fields属性,

修改

在这里插入图片描述 在这里插入图片描述

每次更新之后 version会修改

删除

DELETE /my_doc/_doc/1001

查询

查看单一文档

GET /my_doc/_doc/1001
在这里插入图片描述

查询全部文档

GET /my_doc/_doc/_search
在这里插入图片描述

元数据

定制结果集

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

在这里插入图片描述

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


在这里插入图片描述
在这里插入图片描述
内置分词器

分词

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

英文示例:

POST /_analyze
{
  "analyzer": "standard",
  "text": "php is the best language in the world"
}
在这里插入图片描述

中文示例:

POST /_analyze
{
  "analyzer": "standard",
  "text": "德墨忒尔"
}
在这里插入图片描述

es的内置分词器

中文分词器

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中文分词有两种分词器

自定义中文词库

vim custom.dic
在这里插入图片描述
上一篇 下一篇

猜你喜欢

热点阅读