• Elasticsearch学习系列之term和match查询


    lasticsearch查询模式

    一种是像传递URL参数一样去传递查询语句,被称为简单查询

    GET /library/books/_search //查询index为library,type为books的全部内容
    GET /library/books/_search?q=price:10 //查询index为library,type为books中price等于10的

    另一种是DSL语句来进行查询,被称为DSL查询,term和match就属于DSL

    term查询

    term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

    格式

    复制代码
    GET /library/books/_search       #这里是变化的,指定index和type;(比如说index为library,type为books)
    {
      "query": {
        "term": {
            "key": "value"              #这里是变化的,比如说查询title等于elasticsearch的内容
          }
        }
    }
    复制代码

    实例1:查询index为library,type为books重title等于elasticsearch的内容

    复制代码
    GET /library/books/_search
    {
      "query": {
        "term": {
            "title": "elasticsearch"
        }
      }
    }
    复制代码

    match查询

    match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

    match查询相当于模糊匹配,只包含其中一部分关键词就行

    格式

    复制代码
    GET /library/books/_search 
    {
        "query":{
            "match":{
                "key":"value"      
            }
        }
    }
    复制代码

    实例1:过滤出preview字段中包含"elasticsearch"的索引,并且只显示preview和title字段

    复制代码
    GET /library/books/_search 
    {
        "fields":["preview","title"]
        "query":{
            "match":{
                "preview":"elasticsearch"      
            }
        }
    }
    复制代码

    match_all查询

    查询指定索引下的所有文档

    实例1:过滤出index为library,type为books的所有文档

    GET /library/books/_search 
    {
        "query":{
            "match_all":{}   
            }                                    
    }

    实例2:通过match_all过滤出所有字段,然后通过partial在过滤出包含preview的字段和排除title,price的字段

    复制代码
    GET /library/books/_search 
    {
        "partial_fields":{
            "partial":{
                "include":["preview"],         #包含preview字段的文档
                "exclude":["title,price"]    #排除title,price字段
            },
        "query":{
            "match_all":[]
        }
        }
    }
    复制代码

    match_phrase查询

    短语查询,slop定义的是关键词之间隔多少未知单词

    格式

    复制代码
    GET /library/books/_search 
    {
        "query":{
            "match_phrase" :{
                "query":"Elasticsearch,distributed",
                "slop":2                                 #表示Elasticsearch和distributed之间隔多少单词
            }
        }
    }
    复制代码

    multi_match查询

    可以指定多个字段

    实例1:查询title和preview这两个字段都包含Elasticsearch关键词的文档

    复制代码
    GET /library/books/_search 
    {
        "query":{
            "multi_match":{
                "query":"Elasticsearch"
                "fields":["title","preview"]
            }
        }
    }
    复制代码

    filter过滤查询

    查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据

    简单的filter查询

    实例1:先查询index为library,type为books的全部文档;再过滤price等于20的

    复制代码
    GET /store/products/_search
    {
      "query": {
        "filtered":{
            "query":{
                "match_all": {}  #先查询index为store,type
            },
            "filter": {
              "term" :{
                  "price":20    #这里是条件,price等于20的
              }
            }
        }
      }
    }
    复制代码

    filter之bool过滤查询

    格式

    复制代码
    {
    "bool":{
        "must"        : [],
        "should"   : [],
        "must_not" : [],
    }
    }
    #must:条件必须满足,相当于sql语句的and
    #should:条件可以满足也可以不满足,相当于sql语句的or
    #must_not:条件不需要满足,相当于sql语句的not
    复制代码

    实例1:查询价格等于20或者productID等于SD1002136的商品,再排除价格等于30的

    复制代码
    GET /store/products/_search
    {
      "query": {
        "filtered":{
          "filter":{
            "bool":{
              "should": [
                {"term" : {"price" : 20}},
                {"term" : {"productID" : "SD1002136"}}
              ],
              "must_not": {
                "term" :{"price":30}
              }
            }
          
        }
      }
    }
    }
    复制代码

    filter之and,not,or查询

    没有bool,也可以直接使用and,or,not

    实例1:and用法,查询价格是10元并且productID又是SD1002136的结果

    复制代码
    GET /store/products/_search
    {
      "query":{
        "filtered":{
          "filter":{
            "and":[
              {
                "term":{
                  "price":10
                }
              },
              {
                "term":{
                  "productID":"SD1002136"
                }
              }
              ]
          },
          "query":{
            "match_all": {}
          }
        }
      }
      
    }
    复制代码

    实例2:or用法,查询价格是10元或者productID是SD4535233的商品

    复制代码
    GET /store/products/_search
    {
      "query":{
        "filtered":{
          "filter":{
            "or":[
              {
                "term":{
                  "price":10
                }
              },
              {
                "term":{
                  "productID":"SD4535233"
                }
              }
              ]
          },
          "query":{
            "match_all":{}
          }
        }
      }
    }
    复制代码

    实例3:not用法,查询productID不是SD1002136的商品

    复制代码
    GET /store/products/_search
    {
      "query":{
        "filtered":{
          "filter":{
            "not":{
              "term":{
                "productID":"SD1002136"
              }
            }
          },
          "query":{
            "match_all": {}
          }
        }
      }
    }
    复制代码

    filter之range范围查询

    格式

    复制代码
    GET /store/products/_search
    {
        "query":{
            "filtered":{
                "filter":{
                    "range":{
                        "key":{
                            "条件" : value1
                            "条件": value2
                        }
                    }
                }
            }
        }
    }
    复制代码

    条件

    gt : 大于
    lt : 小于
    gte : 大于等于
    lte :小于等于

    实例1:查询price大于等于20小于等于40的结果

    复制代码
    GET /store/products/_search
    {
        "query":{
            "filtered":{
                "filter":{
                    "range":{
                        "price":{
                            "gte" : 20,
                            "lte" : 40
                        }
                    }
                }
            }
        }
    }
    复制代码
  • 相关阅读:
    用track给视频添加字幕,浏览器被拦截 ,怎么解决?
    小区内公共车位物业管理公司是否有出租权 纵一苇之所如
    使用自动精灵在Android设备上重复播放语音500次
    移动端 持久化数据在客户端
    [go每日一库] go借助net/http包实现客户端get、post请求 Marathon
    [go每日一库] golang gin框架路由设置(全面) Marathon
    [go每日一库] golang中借助json等库实现struct和map互转 Marathon
    [go每日一库] golang validator参数校验 Marathon
    [go每日一库] go语言文件处理 Marathon
    [go每日一库] golang 通过os/exec执行shell命令 Marathon
  • 原文地址:https://www.cnblogs.com/justuntil/p/10488057.html
Copyright © 2020-2023  润新知