• elasticsearch query dsl


    1.match / match_phrase / match_phrase_prefix / multi_match【查询】

    1.1 match 它会根据所给的字符串,进行分词,然后去找出,包含这些分词结果的记录。

    GET /_search
    {
      "query": {
        "match": {
          "title": "我今天看了一场电影"
        }
      }
    }

    中文好用的是ik的两个分词器 ik_max_word 和 ik_smart
    ik_max_word : 会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合;
    ik_smart : 会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」;
    提示:做精确匹配搜索时,你最好用过滤语句,因为过滤语句可以缓存数据。

    1.2 match_phrase 是短语匹配 比 match 精准一点,因为有时候 match 会分词出更多的词。

    1.3 match_phrase_prefix 实现查询时输入即搜索查询时输入即搜索,prefix是前缀的意思,有正则匹配去搜索的意味,只要前缀满足就会都被查询到。

    参考链接:https://blog.csdn.net/chuan442616909/article/details/57917260

    1.4 multi_match 它查询允许你做 match 查询的基础上同时搜索多个字段

    GET dm_map_news/_search
    {
      "query": {
        "multi_match": {
          "query": "中国",
          "fields": ["title","content"]
        }
      }
    }

    2.插入数据

    #put插入数据一定要有_id,可以自己指定
    PUT lagou/job/1
    {
      "name":"ppp",
      "age":12
    }
    
    #post插入数据,可以没有_id,他会自己随机生成一个_id
    POST lagou/job/
    {
      "name":"ppp",
      "age":13
    }

    3.bool 【查询、过滤】

    must : 多个查询条件的完全匹配,相当于 and

    must_not : 多个查询条件的相反匹配,相当于 not

    should : 至少有一个查询条件匹配,相当于 or

    {
        "bool": {
            "must":     { "match": { "title": "how to make millions" }},
            "must_not": { "match": { "tag":   "spam" }},
            "should": [
                { "match": { "tag": "starred" }},
                { "range": { "date": { "gte": "2014-01-01" }}}
            ]
        }
    }

    适合于复杂的查询条件

    4.term 【过滤】

    主要是用于精准匹配.比如数字,日期,布尔值或  not_analyzed 的字符串(未经分析的文本数据类型),但是如果字段是分词的,也可以查得到。

    GET dm_map_news/_search
    {
      "_source": "title", 
      "query": {
        "term": {
          "title": {
            "value": "中国"
          }
        }
      }
    }

    5.terms 【过滤】

    允许多个匹配条件,如果某个字段指定了多个值,那么文档需要一起去做匹配,只要符合其中一个即可

    GET dm_map_news/_search
    {
      "_source": "title",   # 只显示title资格字段
      "query": {
        "terms": {
          "title": [
            "中国",
            "新闻"
          ]
        }
      }
    }

    6.range 【过滤】

    过滤允许我们按照指定范围查找一批数据

    gt :大于

    gte :大于等于

    lt : 小于

    lte : 小于等于

    GET dm_map_news/_search
    {
      "_source": "publish_time", 
      "query": {
        "range": {
          "publish_time": {
            "gte": "2018-01-01 00:00:00",
            "lte": "2019-01-01 00:00:00"
          }
        }
      }
    }

    7. exists 和 missing 【过滤】

    用来查看该字段是否存在

    GET dm_map_news/_search
    {
      "query": {
        "bool": {
          "filter": {
            "exists": {
              "field": "title"
            }
          }
        }
      }
    }

    但是这里missing怎么用不会????????

    8._update_by_query / _delete_by_query

    8.1 _update_by_query 根据查询条件查询出来的数据,修改某些字段的内容

    POST crawler_seed_response/info/_update_by_query
    {
      "script": {
        "inline": "ctx._source.state = params.state",
        "lang": "painless",
        "params": {
          "state": "2"
        }
      },
      "query": {
        "term": {
          "entrance_id": "2460994"
        }
      }
    }
    解释:crawler_seed_response中entrance_id=2460994的数据,把state的字段内容修改为2

    8.2 _delete_by_query 查询出来的数据直接删除,最好是先用 _search 测试下 查询语句对不对,防止误操作。

    post 

    10.Task API

    10.1 获取reindex的状态 GET _tasks?detailed=true&actions=*reindex

    11. _reindex

    将文档拷贝到新的索引下

    POST _reindex
    {
      "source": {
        "index": "news"
      },
      "dest": {
        "index": "news_bak"
      }
    }
    复制一个新的索引 为 news_bak

    参考链接:

    https://blog.csdn.net/liuxiangqian/article/details/78611316?locationNum=9&fps=1

    https://es.xiaoleilu.com/index.html

    https://www.cnblogs.com/softidea/p/6081285.html

  • 相关阅读:
    windows服务安装命令
    vue开发
    Quorum(NRW)算法机制简介
    SideCar模式
    Python抓取数据的几种方式
    Ms SqlServer索引的选择
    cmd添加环境变量
    好用工具网站
    Aufofac生命周期
    EF初次加载优化
  • 原文地址:https://www.cnblogs.com/jinxiao-pu/p/9125397.html
Copyright © 2020-2023  润新知