zoukankan      html  css  js  c++  java
  • ElasticSearch笔记-增删改查

    添加文档:

    添加单个文档

    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" : {
                    }
                } 
            ]
        }
    }
    

    参考:
    https://www.cnblogs.com/shoufeng/p/10782328.html

  • 相关阅读:
    基本语句
    mysql多表查询方法(join)
    MySQL JOIN 多表连接
    MySQL SHOW INDEX语法的实际应用
    1.索引作用
    MySQL索引和优化查询
    mysql复合索引、普通索引总结
    mysql 索引相关
    for循环的break和continue
    保护程序猿滴眼睛---修改VS 2012 编辑器颜色
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/14198376.html
Copyright © 2011-2022 走看看