elasticsearch基础

1、基本概念

2、增删改查

添加

curl -XPUT 'http://host:port/{index}/{type}/{id}'  -d '{json数据}'

curl -XPOST 'http://host:port/{index}/{type}' -d '{json数据}' //id自动生成

curl -XPUT 'http://host:port/{index}/{type}/{id}'?version=版本号&version_type=external' -d '{json数据}' 添加数据时指定版本号

获取

curl -XGET 'http://host:port/{index}/{type}/{id}[?pretty]' 

更新

curl -XPOST 'http://host:port/{index}/{type}/{id}/_update' -d '{json数据}',这种方式json包含两个字段,一个是script,另外一个是params

其中json数据形如

{
    "script": {
        "inline": "ctx._source.content = params.new_content",
        "params": {
            "new_content": "test"
        }
    }
}

另外一种形式是通过使用doc段

“doc":{

   "content":"value"

}

不存在更新时

curl -XPOST 'http://host:port/{index}/{type}/{id}/_update' -d '{json数据}',这种方式json包含两个字段,一个是script,另外一个是upsert

添加新字段

curl -XPOST 'http://host:port/{index}/{type}/{id}/_update' -d '{json数据}',这种方式json包含两个字段,一个是doc,另外一个是doc_as_upsert

删除

curl -XDELETE 'http://host:port/{index}/{type}/{id}'

curl -XDELETE 'http://host:port/{index}/{type}/{id}'?version=n(指定版本号删除)

查询

(1)查询索引下所有的

curl -XGET 'localhost:9200/{index}/_search?pretty'

(2)多索引查询

curl -XGET 'localhost:9200/{index1,index2}/_search?pretty'

对于多索引查询时,如果索引不存在时,会报错,可以添加参数ignore_unavailable=true来避免

curl -XGET 'localhost:9200/{index1,index2}/_search?pretty&ignore_unavailable=true'

(3)所有索引查询

curl -XGET 'localhost:9200/_search?pretty'或者curl -XGET 'localhost:9200/_all?pretty'

(4)类型查询

curl -XGET 'localhost:9200/{index}/{type}/_search?pretty'

查询分析

使用_analyze

curl -XGET 'localhost:9200/{index}/_analyze?pretty&field={field}' -d 'data'

查询参数

参数说明
q指明需要匹配的查询,形式为q={field}:{data}
df当没有指明默认的搜索字段
analyzer指定分析器名
default_operator取值为AND或者OR,指定查询的默认布尔操作符
explain布尔值,指定为true时会结果会返回explain相关信息
fields默认会返回index,type,文档标识id,score和_source。可以通过修改fields,字段间用逗号隔开
sort自定义排序。没有指定时默认是_score降序。指定形式为sort={field}:{desc|asc}
timeout指定查询超时时间,形式为timeout=5s
size和from指定结果窗口,相当于limit offset
terminate_after指定从每个分片取的最大记录数。形式为terminate_after=100
ignore_unavailable布尔值,指定是否忽略不存在的索引
search_type指定搜索类型。没有指定时默认是query_then_fetch。可取的值为dfs_query_then_fetch和query_then_fetch
lowercase_expanded_terms布尔值。指定term为小写
analyze_wildcard布尔值。指定通配查询和前缀查询是否做分析。默认是false

 

3、索引

3.1 配置分片数及副本数

在elasticsearch.yml中设置,默认number_of_shards是5,number_of_replicas是1

index.number_of_shards

index.number_of_replicas

3.2 写一致性

在elasticsearch.yml中配置

action.write_consistency,可用的取值为

quorum要求总活动分片的1半加1成功
one只要求一个写成功
all要求所有的写成功

3.3 索引创建

3.3.1索引自动创建

在elasticsearch.yml中设置action.auto_create_index,既可以设置布尔值(表示是否开启),也可以设置模式来指定索引名

action.auto_create_index:true(false)或者+logs*,-*

3.3.2 索引配置

3.3.3 索引删除

3.4 映射配置

es会自动类型检查,用引号包含的认为是字符串类型,true,false认为是布尔类型,数字时认为是数值类型

在创建索引时,可以用index.mapper.dynamic设置映射配置开关

es7.x中不再支持指定类型映射

3.4.1 数组类型自动检查

使用numeric_detection

对索引添加映射配置

curl -XPUT 'http://localhost:9200/users' -d '{"mappings":{"numeric_detection":true}}' -H 'Content-Type:application/json'

然后添加字段

curl -XPUT 'http://localhost:9200/users/_doc/1' -d '{"name":"User 1", "age":"20"}' -H 'Content-Type:application/json'

查看映射配置

3.4.2 日期类型自动检查

使用date_detection来作为开关,值为布尔值

使用dynamic_date_formats来设置日期格式,值为字符串数组

首先设置日期格式映射

curl -XPUT 'http://localhost:9200/blog' -d '{"mappings":{"dynamic_date_formats":["yyyy-MM-dd hh:mm"]}}' -H 'Content-Type:application/json'

然后添加数据

curl -XPUT 'http://localhost:9200/blog/_doc/1' -d '{"name":"Test", "test_field":"2015-10-01 11:22"}' -H 'Content-Type:application/json'

然后查看映射配置

3.4.3 索引结构映射

使用如下形式来定义映射结构,其中id,name,published,contents表示字段,根据实际情况定义

{
    "mappings":{
            "properties":{
                "id":{"type":"long"},
                "name":{"type":"text"},
                "published":{"type":"date"},
                "contents":{"type":"text"}
            }   
    }
}

将其定义到posts.json文件中

使用curl -XPUT 'http://localhost:9200/posts' -d @posts.json -H 'Content-Type:application/json'来定义mapping,其中需要使用PUT方法

field定义,包含type,store,index

核心类型

类型包含以下

String 
Numberinteger,float,double,long
Date 
Boolean 
Binary 

 

核心类型公共属性

index_name在索引中存放的名字
index分析方式,可取值为analyzed(默认值),no,not_analyzed(针对字符串)
store是否存到索引中,可取值为yes,no(默认值),no时是存到_source中
doc_values可取值为true,false,true时对于非分词字段存在磁盘中,false时存在数据缓存中
boost用于定义字段在文档中重要性,值越大越重要。默认值是1
null_value用于指定字段不是文档中一部分时,需要写入到索引中的值。默认是忽略
copy_to用于指定原始值需要复制到的目的字段
include_in_all用于指定_all中是否包含此字段

 

字符串属性

term_vector可取值为no(默认值),yes,with_offsets, with_positions,with_positions_offsets。用于指定是否计算字段的的索引词项向量
analyzer用于索引及搜索的分析器的名字
search_analyzer用于处理查询字符串中部分的分析器的名字
norms.enabled指定是否需要为此字段加载norms,默认值是true
norms.loading可取值为eager,lazy,用于指定norms加载方式
position_offset_gap默认值0.用于指定相同名字字段实例的距离
index_options持有分词项结构的索引选项。可取值为docs,freqs,positions,offsets.对于分析字段默认值为positions,索引但无需分析的默认值为docs
ignore_above用于定义字段最大大小。超过大小的分析器会忽略

 

数值属性

precision_step定义生成的分词项个数。值越小,生成的越多
coerce默认值为true,是否需要将字符串转为数字
ignore_malformed可取值为true,false。为true时忽略错误形式的值。

 

日期属性

format定义日期格式,默认值为dateOptionalTime
precision_step定义分词项数。
numeric_resolution定义日期以数值表示时的时间单位
ingore_malformed可取true,false。是否需要忽略错误格式的值。

 

多字段

用于不同处理方式使用不同字段情况。使用fields属性,其子属性下定义属性

其他类型

包含ip,token_count

3.4.4 分析器

开箱即用的分析器有

standard方便于欧洲语言的分析器
simple基于非字母字符作分词,并且转为小写
whitespace基于空白字符作分词
stop与simple相似,会根据字符符作些过滤
keyword只传递提供的值
pattern基于正则表达式作分割
language用于使用特定语言
snowball类似于standard,但提供主干生成算法 

 

3.4.5 批量操作数据

使用_buld。可以对索引或者索引+类型(_bulk或者{index}/_bulk或者{index}/{type}/_bulk)

使用_all字段。可以通过设置mapping配置来开启或者关闭{"_all":{"enabled":{true/false}}}。

使用_source字段。可以通过设置mapping配置来开启或者关闭{"_source":{"enabled":{true/false}}}或者{"_source":{"excluded":[...]}}。

不可配置的字段:_id(文档的标识符),_uid(用于唯一标识符),_type(文档的类型名),field_names(文档中存在的字段)

 

 


 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值