DSL操作ES-操作索引库
# 创建索引库
PUT test
# 查看索引库
GET test
# 删除索引库
DELETE test
# 关闭索引库
POST test/_close
# 打开索引库
POST test/_open
GET test/_search # 查询全部
GET test/_mapper #查询映射数据
DSL操作ES-区分类型-操作映射
1)简单数据类型:
text:可以分词,不支持聚合(统计)
keyword:不会分词,将全部内容作为一个词条,支持聚合(统计) name keyword
布尔(boolean)
二进制(binary)
范围类型(integer_range, float_range, long_range, double_range, date_range)
日期(date)
2)复杂数据类型
-
数组 []:没有专用的array数据类型,任何一个字段的值,都可以被添加0个到多个,但要求他们的类型必须一致,当类型一直含有多个值存储到ES中会自动转化成数组类型 ["eric","jack"] List Set
-
对象 {} Map User {key:value,key:value}
3)GEO: geo_point 地理位置坐标值
简单试水:
# 创建一个person的索引库,并且有映射
PUT person
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "integer"
}
}
}
}
# 查看映射
GET person/_mapping
# 添加字段
PUT person/_mapping
{
"properties":{
"sex":{
"type":"keyword"
}
}
}
添加文档,指定id
POST person/_doc/1
{
"name":"张三",
"age":18,
"sex":"男"
}
添加文档,不指定id
POST person/_doc
{
"name":"翠花",
"age":20,
"sex":"女"
}
删除文档
DELETE person/_doc/1
# ==========文档的操作=============
# 指定id添加文档
POST person/_doc/1
{
"name":"如花",
"age": 18,
"sex":"男"
}
# 不指定id添加文档
POST person/_doc/2
{
"name":"翠花",
"age": 19,
"sex":"女"
}
# 查看所有文档
GET person/_search
# 根据id查看文档
GET person/_doc/rdJ9qYIB33sH7ezNb5Mu
# 修改文档
PUT person/_doc/rdJ9qYIB33sH7ezNb5Mu
{
"name":"玫瑰花",
"age":"20"
}
# 根据id删除文档
DELETE person/_doc/rdJ9qYIB33sH7ezNb5Mu
#注: 添加文档不指定id会自动生成一个id值
分词器
-
Standard Analyzer - 默认分词器,按词/字切分,小写处理 (英文)
-
Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
-
Stop Analyzer - 小写处理,停用词过滤(the,a,is)
-
Whitespace Analyzer - 按照空格切分,不转小写
-
Keyword Analyzer - 不分词,直接将输入当作输出
-
Patter Analyzer - 正则表达式,默认\W+(非字符分割) (中文会被去掉)
-
Language - 提供了30多种常见语言的分词器
第三方ik 分词器
ik_smart:最小分词法
ik_max_word:最细分词法
Elasticsearch高级搜索:查询接口说明
查询所有:查询出所有数据,一般测试用。例如:match_all
全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
-
multi_match_query
-
match_query
精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
- ids
- range
- term
地理(geo)查询:根据经纬度查询。例如:
- geo_distance
- geo_bounding_box
复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
- bool
- function_score
常见的全文检索查询包括:
match查询:单字段查询
multi_match查询:多字段查询,任意一个字段符合条件就算符合查询条件
match查询语法如下:
GET /indexName/_search
{
"query": {
"match": {
"FIELD": "TEXT"
}
}
}
mulit_match语法如下: