• 【HBZ分享】ES中的DLS命令使用


    ES中常见的DLS关键字及命令的使用案例

    1. match:匹配关键字,包含分词的模糊匹配,以及精准匹配
    title: 字段的名称, elasticsearch要查的内容,即查询title中带有elasticsearch的文档
    GET /索引库名/_search 
    {
      "query": {
        "match": {
          "title": "elasticsearch"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. term:用于精确匹配一个指定字段的关键词,不进行分词处理。
    category: 字段的名称, books要查的内容, 即查询category = books的文档
    GET /索引库名/_search 
    {
      "query": {
        "term": {
          "category": "books"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. match_all: 全量查询,一般很少用,所有数据全都查出来
    match_all后面的大括号就这么写就行,啥也不需要加
    GET /shop_v1/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    es中的分页 以及 范围查询

    1. gte:大于等于

    2. gt:大于

    3. lte:小于等于

    4. lt:小于

    范围擦汗寻, 查询price在5-10之间的数据
    GET /shop_v1/_search
    {
      "query": {
        "range": {
          "price": {
            "gte": 5,
            "lte": 100
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    分页查询, size = 每次查询的条数, from = 从第几条开始查
    GET /shop_v1/_search
    {
      "size": 10,
      "from": 0,
      "query": {
        "match_all": {}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ES中的排序

    1. 通过sort字段,desc 与 esc分别是降序 与 升序
    使用key = sort, 根据price进行esc升序排序
    GET /shop_v1/_search
    {
      "size": 10,
      "from": 0,
      "sort": [
        {
          "price": "asc"
        }
      ],
      "query": {
        "match_all": {}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ES的布尔查询

    1. "must"关键字用于指定必须匹配的条件,即所有条件都必须满足

    2. "must_not"关键字指定必须不匹配的条件,即所有条件都不能满足

    3. "should"关键字指定可选的匹配条件,即至少满足一个条件

    格式:
    {
      "query": {
        "bool": {
          "must": [
            // 必须匹配的条件
          ],
          "must_not": [
            // 必须不匹配的条件
          ],
          "should": [
            // 可选匹配的条件
          ],
          "filter": [
            // 过滤条件
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    案例: 查询,summary字段中,必须包含Cloud的内容(因为是match分词匹配), 【并且】price的范围必须 >= 5
    GET /shop_v1/_search
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "summary": "Cloud" }},
            { "range": { "price": { "gte": 5 }}}
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ES中的filter过滤

    1. filter可以缓存查询数据,达到搞笑
    2. 可以对 【数字范围】,【日期范围】,【布尔逻辑】,【存在性检测】进行操作
    term查询过滤器, 过滤出category = books的数据,完全匹配,因为term是精准匹配的key
    GET /product/_search
    {
      "query": {
        "bool": {
          "filter": {
            "term": {
              "category": "books"
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    range查询过滤器,过滤出price在30-50之间的数据
    GET /product/_search
    {
      "query": {
        "bool": {
          "filter": {
            "range": {
              "price": {
                "gte": 30,
                "lte": 50
              }
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    == 总节: 其实使用filter 和 直接使用range差范围是一致的,只不过filter下面可以同时使用range 与 term等==

    ES中的match多字段匹配 和 短语搜索

    1. 多字段搜索使用:multi_match
    2. 短语搜索使用:match_phrase
    3. 短语搜索会考虑到短语间多个词语的顺序,比如搜 iPhone 32G, 那么就会把文档中带有【iPhone 32G】的搜索出来,只有iPhone 或 只有32G的数据都是不能搜出来的,又有iPhone 32G在一起的才会被搜索
    多字段搜索使用:multi_match
    query = 要搜索的关键词, fields = 该关键词出现的字段都要搜出来
    含义:搜索出product_name, description这俩字段中,包含iPhone的文档, 两个字段为OR关系,只要iPhone这个词存在于其中一个字段那么就会被搜索
    GET /product_v2/_search
    {
     "query": {
       "multi_match": {
         "query": "iPhone",
         "fields": ["product_name", "description"]
       }
     }
    }
    query:需要匹配的查询文本。
    fields:一个包含需要进行匹配的字段列表的数组。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    短语搜索使用:match_phrase, 搜索description字段中,带有classic noval的文档, 必须classic noval这个顺序,这个词组才行,缺一个词,或顺序不对都不能搜出来
    GET /product_v2/_search
    {
      "query": {
        "match_phrase": {
          "description": "classic novel"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    match例子
    match搜索,会进行分词, 即把classic novel分词,只要description带有classic 或者 novel的都能搜出,这个是match
    GET /product_v2/_search
    {
      "query": {
        "match": {
          "description": "classic novel"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ES的fuzzy日常拼错矫正查询

    1. fuzzy可以自动矫正简单的拼错,比如日常中一个单词,某两个字母写反了,或者漏写了等简单的失误,fuzzy都可以矫正
    2. 但精准度可能比较低,并且比较耗费CPU
    3. fuzzy模糊查询是根据编辑距离来模糊匹配的
    4. 编辑距离指的是:
      (1). 更改字符(box→fox)
      (2). 删除字符(black→lack)
      (3). 插入字符(sic→sick)
      (4). 转置两个相邻字符(dgo→dog)
    5. fuzzy不会进行分词
    6. 模糊度fuzziness: 0,1,2,auto, 其中auto是单词超过5个字符,默认设置为2。小于2个字符,默认设置为0
    # 指定模糊度2,更松散匹配, 比如要查询包含cloud的文档,但少写了两个字母,写成了clo, 设置模糊度为2,则可以自动匹配上
    -查询summary字段中,包含cloud的文档,输入的查询值为clo, 模糊度设置2
    GET /shop_v1/_search
    {
      "query": {
        "fuzzy": {
          "summary": {
            "value": "clo",
            "fuzziness": "2"
          }
        }
      }
    }
    
    # 指定模糊度1,更严格匹配, 同样搜cloud,但写成了clo, 由于少了两个字母,模糊度为2,但实际设置是1,所以距离不够,无法检索到内容
    - 查询summary字段中,包含cloud的文档,输入的查询值为clo, 模糊度设置1
    GET /shop_v1/_search
    {
      "query": {
        "fuzzy": {
          "summary": {
            "value": "clo",
            "fuzziness": "1"
          }
        }
      }
    }
    
    # 使用自动检查,1个单词拼写错误, auto自动设置模糊度,当大于5个字符会默认自动设置模糊度为2, 当小于2个字符,会自动设置模糊度为0
    查询summary字段中,包含spring的文档,输入的查询成了Springa, 模糊度设置auto, 由于spring大于5,所以模糊度为2
    GET /shop_v1/_search
    {
      "query": {
        "fuzzy": {
          "summary": {
            "value": "Sprina",
            "fuzziness": "auto"
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    ES的高亮显示

    1. 基本用法: 在 key = highlight 里面填写要高亮显示的字段,可以填写多个字段,并且高亮的部分就是关键字,在搜出来的文档中,查询输入的内容会是高亮的。
    2. 高亮显示是通过标签包裹匹配的文本来实现的,通常是 或其他 HTML 标签,当然可以修改这个标签,下面有例子
    3. pre_tags, post_tags是前后置标签,就是改变高亮的样式,默认是, 可以通过这两个去替换em标签,比如用font来替换
    查询出 title字段包含【java】 或者 content字段包含【老王】的文档, 并且高亮显示出title, content中的搜索关键字, 关键字高亮的样式设置为 java  这种的,不使用默认的
    GET /high_light_test/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "title": "java"
              }
            },
            {
              "match": {
                "content": "老王"
              }
            }
          ]
        }
      },
      "highlight": {
        "pre_tags": "",
        "post_tags": "",
        "fields": [
        	{
        		"title":{}
        	},
      		{
      			"content":{}
      		}
     	]
      } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    特征缩放和转换以及自定义Transformers(Machine Learning 研习之九)
    计算机毕业设计选题Java毕业设计之基于SSM实现的财务|记账|账单管理系统
    【广州华锐互动】利用VR开展细胞基础实验教学有什么好处?
    [datawhale202211]跨模态神经搜索实践:环境配置
    华为机试 - 滑动窗口最大和
    shell脚本入门-多命令处理与变量
    异步代码执行顺序
    Ubuntu20.04安装 Pytorch1.7.0 GPU版 torchvision=0.8.1 (已装好CUDA和CUDNN)
    东盟与中日韩(10+3)中小企业人工智能产业论坛
    用HTML+CSS做一个漂亮简单大学生校园班级网页
  • 原文地址:https://blog.csdn.net/a645293829/article/details/134173723