添加文档:
添加单个文档
http://139.155.44.138:9200/index1/user/1000 POST
{
"id":1001,
"name":"张三",
"age":20,
"sex":"男"
}
如果不指定id,将随机生成一个,id的字段名是_id
批量添加文档
POST index6/user/_bulk
{"create":{"_index":"index6","_type":"user","_id":2001}}
{"id":2001,"name":"name1","age": 20,"sex": "男"}
{"create":{"_index":"index6","_type":"user","_id":2002}}
{"id":2002,"name":"name2","age": 20,"sex": "男"}
{"create":{"_index":"index6","_type":"user","_id":2003}}
{"id":2003,"name":"name3","age": 20,"sex": "男"}
最后一行一定要回车
删除文档:
删除指定id的文档
http://localhost:9200/blog/article2/1 DELETE
按条件删除
POST index5/people/_delete_by_query?q=name:zhangsan
修改文档
覆盖文档:
ES中文档数据不能修改,可以通过覆盖的方式进行更新。所以和上面的操作相同
http://139.155.44.138:9200/index1/user/1001 POST
{
"id":1001,
"name":"张三",
"age":20,
"sex":"男"
}
修改字段:
上面操作时更新整个文档,可以操作局部更新,但是实际上es内部帮我们查询这个文档,然后修改、覆盖整个文档
http://139.155.44.138:9200/index1/user/1001/_update POST
{
"doc":
{
"age":2000
}
}
批量操作文档
语法
{ action: { metadata }}
{ requestbody}
{ action: { metadata }}
{ requestbody}
批量添加
POST index6/user/_bulk
{"create":{"_index":"index6","_type":"user","_id":2001}}
{"id":2001,"name":"name1","age": 20,"sex": "男"}
{"create":{"_index":"index6","_type":"user","_id":2002}}
{"id":2002,"name":"name2","age": 20,"sex": "男"}
{"create":{"_index":"index6","_type":"user","_id":2003}}
{"id":2003,"name":"name3","age": 20,"sex": "男"}
批量删除
POST index6/user/_bulk
{"delete":{"_index":"index6","_type":"user","_id":2001}}
{"delete":{"_index":"index6","_type":"user","_id":2002}}
{"delete":{"_index":"index6","_type":"user","_id":2003}}
文档是否存在
HEAD index6/user/2008
查询
查询有两种方式:
简单查询:通过query参数传递查询语句(?q=name:zhangsan)
DSL查询:通过DSL语句查询,可以写出灵活复杂的查询语句,语言以json请求体的形式出现
使用id查询
http://139.155.44.138:9200/index1/user/1001 GET
全部(默认返回10条数据)
http://139.155.44.138:9200/index1/user/_search GET
按条件查询
http://139.155.44.138:9200/index1/user/_search?q=name:233 GET
term查询:
term主要用来精确匹配值,比如数字、日期、bool、未分词的字符串
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"term":{
"age":18
}
}
}
terms查询:
terms和term类似,但允许指定多个匹配条件。如果字段指定了多个值,那么文档需要一起去做匹配
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"terms":{
"age":[18,38]
}
}
}
range查询:
按指定范围查找数据
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"range":{
"age":
{
"gte":18,
"lt":50
}
}
}
}
exists查询:
用于查找文档中是否包含指定字段或没有某个字段,类似sql中的IS_NULL
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"exists":{
"field":"name"
}
}
}
排序
GET index5/people/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"_id": {
"order": "asc"
}
}
]
}
分页
GET index5/people/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"_id": {
"order": "asc"
}
}
],
"from": 0,
"size": 2
}
bool查询:
bool查询可以用来合并多个条件查询结果的布尔逻辑.
关键词:
关键词 | 描述 |
---|---|
must | 必须满足的条件,而且会计算分数 |
filter | 必须满足的条件,不会计算分数 |
should | 可以满足的条件,会计算分数 |
must_not | 必须不满足的条件,不会计算分数 |
它包含操作符:must相当于and、must_not相当于not、should相当于or
http://139.155.44.138:9200/index1/_search POST
{
"query": {
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
过滤查询?
做精确搜索时,最好用过滤语句,因为过滤语句可以缓存数据
match查询:
Full Text Search会对检索文本作分词处理, 然后从倒排索引中作匹配查询, 如果一个文档的对应field中存在任意一个分解后的词, 那么这个文档就算匹配检索条件.
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"match":{
"name":"张三 aaa"
}
}
}
match_phrase
Phrase Search不会对检索串进行分词处理, 只有一个文档的对应field中包含与检索文本完全一致的内容, 该文档才算匹配检索条件, 也才能作为结果返回 —— 可以理解为全文检索场景下的部分精确匹配.
GET meshop-track-2020.12.01/_search
{
"query": {
"match_phrase": {
"domain_userid": "e7c885a0-169f-4ae7-94c8-bd38ceee0cde"
}
}
}
高亮显示:
http://139.155.44.138:9200/index1/_search POST
{
"query":{
"match":{
"name":"wangwu zhaoliu"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
结果过滤
相当于SELECT子句,返回部分字段
简单查询:index1/_search?_source=id,name
DSL查询:
GET index5/people/_search
{
"query": {
"match_all": {}
},
"_source": ["name","age"]
}
排重查询:
POST meshop-track-2020.12.05/track/_search
{
"size":0,
"query":
{
"bool":
{
"must":
[
{"term":{"page_urlhost":"www.berniam.com"}},
{"term":{"event_name":"page_view"}}
]
}
},
"aggs": {
"uid_aggs": {
"cardinality": {
"field": "doc_width"
}
}
}
}
search参数列表
参数 | 使用方法 |
---|---|
q | 查询字符串,案例:q=-field1:test #查找不满足条件的所有文档 |
from | 从所有返回结果中的第几条开始显示, 默认为0. |
size | 搜索结果返回的条数. 默认为10, 即返回前10条. |
df | 查询中没有定义前缀时, 默认的搜索字段 |
analyzer | 分析查询字符串所使用的分析器的名称 |
lowercase_expanded_terms | 搜索时忽略大小写标识, 默认为true |
analyze_wildcard | 通配符或前缀查询是否被分析, 默认为false |
batched_reduce_size | 协调节点需要减少的分片结果数. 当分片数量很多时, 会产生很大的内存开销, 这个参数用来当做保护机制 |
default_operator | 默认的多个条件之间的关系, 可以是 AND 或 OR. 默认是 OR. |
lenient | 如果设置为true, 字段类型转换失败时将忽略处理. 默认为false. |
explain | 在每个返回结果中, 将包含评分机制的详细计算描述. |
_source | 是否包含元数据, 同时支持_source_incude和_source_exclude. |
stored_fields | 选择查询到的文档的指定字段, 多个之间用","分隔. 若不指定任何字段, 就不会返回任何字段. |
sort | 根据字段名排序. 可以是fieldName, 或fieldName:desc, 或fieldName:asc, 或_score (给予分数的排序). 可以有多个排序参数, 要注意各参数之间的顺序. |
timeout | 搜索超时, 在指定的时间内执行搜索请求, 并在超时时间到期时返回查询到的已有结果. 默认无超时. |
track_scores | 跟踪评分. 排序时, 设置为true后将跟踪评分情况, 并在返回的结果中携带评分信息. |
track_total_hits | 设置为false, 禁止跟踪每个查询的结果总数. 默认为true, 即统计搜索到的结果总数. |
terminate_after | 每个分片搜索的最大文档数, 如果达到此值, 即使搜索尚未结束, 当前分片将提前终止搜索. 如果设置, 响应信息中将携带一个boolean类型的terminated_early字段, 表示查询提前终止了. 默认没有设置. |
search_type | 搜索的类型, 可以是dfs_query_then_fetch或query_then_fetch, 默认是query_then_fetch. |
allow_partial_search_results | 如果请求将产生部分结果, 设置为false用来返回整体故障. 默认为true,这将在超时或部分失败的情况下, 返回部分结果. 可以通过集群中的search.default_allow_partial_results来设置此参数 |
查询多索引数据
# 同时搜索两个index下的数据
GET index1,index2/_search
# 按照通配符匹配搜索多个index下的数据
GET *1,*2/_search
timeout超时机制
指定每个Shard必须在规定的时间内将搜索到的数据 (可能只搜索到了部分数据, 也可能搜索到了全部数据) 立即返回给客户端, 而不是等待查询操作完全完成后再返回
ES的搜索默认不开启timeout, 可以手动指定timeout
GET _search?timeout=10ms
# 可用的单位: timeout=10ms | timeout=1s | timeout=1m
查询响应信息说明
{
"took" : 346, // 整个检索消耗的时间, 单位是毫秒. 包括线程池中的等待时间、集群中分布式搜索+收集结果的时间
"timed_out" : false, // 默认不启用超时机制, 若启用, 需要设置具体的时间值
"_shards" : { // 搜索用到的shard数, 以及成功/失败的shard数
"total" : 5,
"failed" : 0 // 一个Shard的Primary和Replicas都挂掉, 它才被认为失败
},
"hits" : {
"total" : 10, // 本次搜索命中(搜索到)的结果总数
"max_score" : 1.0, // 本次搜索的所有结果中, 最大的相关度分数
"hits" : [ // 默认显示查询结果中的前10条记录, 根据_score降序排序
{
"_index" : "book_shop",
"_type" : "books",
"_id" : "2",
"_score" : 1.0, // 相关度得分, 越相关, 分值越大, 排位越靠前
"_source" : {
}
}
]
}
}