网站首页 文章专栏 elasticsearch学习(四)----数据查询

elasticsearch学习(四)----数据查询

编辑时间:2019-06-06 18:54:11 作者:苹果 浏览量:558




elasticsearch 用来干啥?
答:高效,快速实现各种听起来很美好,实现起来很复杂的查询需求。





term:term主要用于精确匹配,如字符串、数值、日期等(不适合情况:1.列中除英文字符外有其它值 2.字符串值中有冒号或中文 3.系统自带属性如_version)

{
   "query": {
       "term": {"id": 1}
   }
}


terms:跟term有点类似,但可以同时指定多个条件,相当于union all的作用,汇聚所有查询的值

{
   "query": {
       "term": {"date": ["2014-09-01","2014-10-03"]}
   }
}

range:区间查询

{
   "query": {
       "range":{
           "age":{   //查询age字段
               "gt":2, //大于2
               "lt":100 //小于100
           }
       }
   }
}



bool过滤:用来合并多个过滤条件的查询结果的布尔逻辑,必须包含must和should中的一个或多个。它包含以下一些操作

must: 文档必须完全匹配条件   简单的说就是  &  与
should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should   简单的说就是  ||  或
must_not: 文档必须不匹配条件  简单的说就是  !  非

{
   "query": {
       "bool":{
           "must":{   //and age==50
               "term":{"age":50}
           },
           "must_not":{    //not uid=922307
               "term":{"uid": "922307"}
           },
           "should":[  //  tag1==8 or tag2=1
               {"term":{"tag1":8}},
               {"term":{"tag2":1}}
           ]
       }
   }
}




match: 一个标准的查询,它可以精确或模糊查询

{
   "query": {
       "match":{
           "title":"起火 快递"   # title中包含起火 或快递
       }
   }
}


常用于多字段匹配

{
    "multi_match": {
        "query":                "需要查询的内容",
        "type":                 "best_fields", #字段可分配权重,计算分值 取某个field匹配度最高的那个分数
        "fields":               [ "title", "body" ],
    }
}
{
    "multi_match": {
        "query":                "需要查询的内容",
        "type":                 "most_fields", #匹配到的字段越多分值越高
        "fields":               [ "title", "body" ],
    }
}
  "query": {
    "multi_match": {
      "query": "需要查询的内容",
      "operator":"and",
      "fields": ["title","body"],
      "type": "cross_fields"   # 取多个query针对每一个field的评分最小值,即对每个字段都计算分值
    }
  }
}




regexp:  正则匹配

{
   "query": {
       "regexp":{
           "title":".+[0-9]*.+"  //匹配 任意字符 任意数字 任意字符  正则表达式
       }
   }
}



prefix:  前缀

{
   "query": {
       "prefix":{
           "title":"1"  // title 以1开头的数据,不适合值为中文
       }
   }
}




phrase_match: 短语匹配  对这个部分词不经常拆词的匹配

{
   "query": {
       "match_phrase":{
           "title":"test bydls"  // title中包含test bydls这个整体而不是test 或 bydls
       }
   }
}



    出自:何冰华个人网站

    地址:http://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论