ElasticSearch基本操作说明文档
这里默认ip地址为 http://localhost:9201/ ,更加直观,并且已经在此环境下配置好了es,默认操作工具使用postman
es的结构一般分为 _index/_type/_id/_source
index是索引,type是类型,id是id值,source是字段所需要的内容
相对_mapping和_settings是
_mapping是对mapping结构进行操作,mapping就是type的元数据,每个type都有一个自己的mapping,决定了数据类型,建立倒排索引的行为,还有进行搜索的行为,相当于mysql中的表结构之类的设计。
_setting是对设置方面进行额外的设置,settings就是一些创建者信息、分片、副本、以及uuid以及版本、创建时间等一些元信息,settings中的部分字段只能在初始化的时候设计比如分片。相当于表的某些其他信息。
1、创建索引
put http://localhost:9201/index_name
index_name是你要创建的索引名
get http://localhost:9201/_cat/indices 查看所有索引 indices是index的复数形式之一
2、创建索引映射
put http://localhost:9201/index_name
body:raw
{
"mappings": {
"_doc": {
"properties": {
//字段类型以及字段名以这种方式向后延伸
"age": {
"type": "integer"
},
"name": {
"type": "text"
},
"title": {
"type": "text"
}
}
}
}
}
3、增加映射对象
put http://localhost:9201/index_name/_doc/user
body:raw
{
"age":1,
"name":"my",
"title":"changetitle"
}
4、删除映射对象
delete http://localhost:9201/index_name/_doc/删除对象的ID
body:none
5、修改映射对象
put http://localhost:9201/index_name/_doc/修改对象的ID
body:raw (覆盖原ID值的对象)
{
"age":1,
"name":"myyyyyy",
"title":"changetitle"
}
6、查询映射对象
查询结构
get http://localhost:9201/index_name/_mapping
查询其他
post http://localhost:9201/index_name/_search
以下查询只变更body中的内容
6.1、查询全部
body:raw
{
"query":{
"match_all":{}
}
}
6.2、查询指定字段指定值
body:raw
{
"query":{
"match":{
"age":1
}
}
}
多字段查询
其中
must:文档 必须 匹配这些条件才能被包含进来
must_not:文档 必须不 匹配这些条件才能被包含进来
should:如果满足这些语句中的任意语句,将增加 _score
body:raw
{
"query":{
"bool":{
"must_not":[
{"match":{"year":"2003"}},//年份必须是2003
{"match":{"title":"Kill"}}//标题必须包含Kill
] ,
"should": [
{"range": {"age": {"gte": 5}}} //年龄大于5的
}
}
}
6.3、字段范围查询
gte :大于和等于,gt:大于,lte:小于和等于,lt:小于
body:raw
{
"query":{
"range":{
"year":{
"gte":3,
"lte":223
}
}
}
}
6.4、分页查询
from:第几个对象开始
size:容纳几个对象
下列语句就是第0个开始的第一个 也就是第一个
body:raw
{
"from": 0, "size": 1
"query": {
"match_all": {}
},
}
6.5、其余查询方法
可以搜到所有相关搜索字符串的文档
post http://localhost:9201/index_name/_search?q=(字段名:搜索内容)/(搜索内容)
body:none
简单字符串匹配查询
http://localhost:9201/index_name/_doc/_search
body:raw
{
"query":{
"query_string":{
"query":"myzz"
}
}
}
7、增添映射对象字段
put http://10.106.65.1:9201/index_name/_mapping/_doc (对mapping结构相关的用mapping)
在原有字段的基础上进行字段添加
{
"properties": {
//字段类型以及字段名以这种方式向后延伸
"age": {
"type": "integer"
},
"name": {
"type": "text"
},
"title": {
"type": "text"
},
//添加新字段
"time":{
"type":"keyword"
}
}
}
8、bulk批量操作
在postman操作时候,以及代码操作上记得每一行后都要空一行出来,包括最后一列
post http://localhost:9201/index_name/_doc/_bulk
增加
{"index": {"_id": "7"}}
{"username": "my7","age":"12333","address": "重庆"}
{"index": {"_id": "8"}}
{"username": "my8","age": "12334","address": "西安"}
或(create操作如果ID已存在,则会返回错误)
{"create": {"_id": "7"}}
{"username": "my7","age":"12333","address": "重庆"}
{"create": {"_id": "8"}}
{"username": "my8","age": "12334","address": "西安"}
删除(删除只需要对应ID)
{"delete": {"_id": "7"}}
{"delete": {"_id": "8"}}
修改(可以只更改想更改的字段,不存在的id也会直接进行create)
"doc_as_upsert":对不存在的id也会进行新创建,对存在的文档字段就进行更新,不存在的字段就不更新
{"update": {"_id": "7"}}
{"doc":{"address": "西安city"},"doc_as_upsert" : true}
{"update": {"_id": "8"}}
{"doc":{"address": "重庆city"},"doc_as_upsert" : true}
9、各分词器解析
9.1、ES内置分词器
standard 分析器划分文本是通过词语来界定的,由Unicode文本分割算法定义。它删除大多数标点符号,将词语转换为小写(就是按照空格进行分词)
"text": "today is 2018year 5month DAy."
today is 2018year 5month day
simple 分析器每当遇到不是字母的字符时,将文本分割为词语。它将所有词语转换为小写。
today is year month day
keyword 可以接受任何给定的文本,并输出与单个词语相同的文本
today is 2018year 5month DAy
pattern 分析器使用正则表达式将文本拆分为词语,它支持小写和停止字
today is 2018year 5month day
language 语言分析器(针对不同国家的语言)
whitespace (空白)分析器每当遇到任何空白字符时,都将文本划分为词语。它不会将词语转换为小写,按照空格切分,不转小写
today is 2018year 5month DAy
stop 小写处理,停用词过滤(the ,a,is)
today year month day
10、数据转移操作
数据迁移
post http://localhost:9201/_reindex
{
"source":{"index":"source_index"},
"dest":{"index":"target_index"}
}
添加修改别名
post http://localhost:9201/_aliases
{
"actions": [
{
"remove": {
"index": "old_source_index",
"alias": "old_source_alias"
}
},{
"add": {
"index": "new_source_index",
"alias": "new_source_alias"
}
}
]
}
11、建表模板
PUT http://localhost:9201/index_20201201(索引名_日期)
这里采用的是ngram分词器
{
"mappings": {
"_doc": {
"dynamic": "strict",
"properties": {
//内容字段分词等等。
}
}
},
"settings": {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 30,
"token_chars": [
"letter",
"digit"
]
}
}
},
"index": {
"refresh_interval": "3s",
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}