栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch请求类型和使用说明

Elasticsearch请求类型和使用说明

文章目录
  • 说明
  • 分享
  • 查询说明
    • 查询方式
    • 查询方式加字段类型
  • 查询实例
    • 精确匹配
      • term
      • terms
    • 分词匹配
      • match
      • match_all
      • multi_match
      • match_phrase
    • 模糊查询fuzzy
    • 通配符查询wildcard
    • 组合查询 bool
      • should或
      • must与
      • must_not非
    • range范围查询
    • regexp正则匹配
    • exists有值查询
    • missing无值查询
    • prefix前追匹配查询
    • 排序+指定位置
  • 优化
    • term数值查询
  • 总结

说明

ElasticSearch请求类型很多,支持精确、模糊、组合、正则、范围等,为复杂查询提供保证。

分享
  • 大数据博客列表
查询说明
  • Elasticsearch有不同类型和查询规则,大致总结如下,后续根据实际情况修正,学无止境。
查询方式
方式名说明特点
term精准查询字段和内容完全匹配
terms精准查询term扩展,支持单字段多内容查询
match_all查询全部信息查询index全部信息
match分词匹配查询单字段分词匹配查询
multi_match分词匹配查询多字段分词匹配查询
match_phrase分词匹配查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,但只保留那些包含 全部 搜索词项,且 位置与搜索词项相同的文档
query_string类似matchmatch需要指定字段名,query_string不需要指定字段名,是在所有字段中搜索,范围更广泛。
fuzzy模糊查询满足查询的指定字符个数即可
wildcard通配符查询允许指定一个模式来匹配,而不需要指定完整的trem,匹配的方式类似于match的分词匹配查询,可使用?和*
bool布尔查询支持should(或)、must(与)、must_not(非)
range范围查询integer、long、double、data、ip等类型数据的范围查询,通过relation设置关系:within、contains、intersects
regexp正则查询通过正则搜索字段中满足条件的数据
prefix前缀匹配查询
exists字段查询文档字段是否有值
missing字段查询文档字段是否为空
fuzzy_like_this文档搜索
fuzzy_like_this_field文档搜索
more_like_this文档搜索
more_like_this_field文档搜索
查询方式加字段类型
方式数据类型特点
termkeywordterm不分词,keyword字段也不分词,需要完全匹配才可
termtextterm不分词,text字段分词,所以term查询条件必须是text字段分词后的某一个。
matchkeywordmatch分词,keyword不分词,match的需要跟keyword的完全匹配可以。
matchtextmatch分词,text分词,只要match的分词结果和text的分词结果有相同的就匹配
match_phrasekeywordmatch_phrase的需要跟keyword的完全匹配才可以。
match_phrasetextmatch_phrase是分词的,text也是分词的。match_phrase的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。
query_stringkeyword无法查询
query_stringtext不需要连续,顺序还可以调换。
查询实例

以下查询全部以post类型,请求地址:http://127.0.0.1:9200/索引名/_search

精确匹配 term

单字段或多字段单值精确查询,请求数据:

{
    "query": {
        "term": {
            "name.keyword": "张三"
        }  
    }
}
  • 响应:
{
    "_shards":{
        "total":1,
        "failed":0,
        "successful":1,
        "skipped":0
    },
    "hits":{
        "hits":[
            {
                "_index":"userindex",
                "_type":"_doc",
                "_source":{
                    "args":20,
                    "createtm":"2018-4-5 11:07:23",
                    "name":"张三",
                    "description":"张三是java开发工程师",
                    "id":1
                },
                "_id":"one",
                "_score":0.6931471
            }
        ],
        "total":{
            "value":1,
            "relation":"eq"
        },
        "max_score":0.6931471
    },
    "took":2,
    "timed_out":false
}
terms

字段多值精确查询,请求数据实例:

{
    "query": {
        "terms": {
            "name.keyword": ["张三","思路"]
        }
    }
}
  • 响应:
{
    "_shards":{
        "total":1,
        "failed":0,
        "successful":1,
        "skipped":0
    },
    "hits":{
        "hits":[
            {
                "_index":"userindex",
                "_type":"_doc",
                "_source":{
                    "args":20,
                    "createtm":"2018-4-5 11:07:23",
                    "name":"张三",
                    "description":"张三是java开发工程师",
                    "id":1
                },
                "_id":"one",
                "_score":0.6931471
            }
        ],
        "total":{
            "value":1,
            "relation":"eq"
        },
        "max_score":0.6931471
    },
    "took":2,
    "timed_out":false
}
分词匹配 match

单字段分词匹配查询,如果是中文,如查询字段name为张三,结果会返回name包含张和三的数据。请求数据实例:

{
    "query":{
        "match":{
            "name":"zhangsan"
        }
    }
}

match_all

查询index所有数据,请求数据实例:

{
    "query":{
        "match_all":{
        }
    }
}
multi_match

多字段分词匹配查询,请求数据实例:

{
    "query":{
        "multi_match":{
            "query":"zhangsan",
            "fields":["name","description"]
        }
    }
}
match_phrase

短语匹配查询,ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变。请求数据实例:

{
    "query":{
        "match_phrase":{
            "name":"zhangsan lisi"
        }
    }
}
模糊查询fuzzy

可以纠正查询时输入内容部分错误,fuzziness设置最小匹配字符。请求数据实例:

{
    "query":{
        "fuzzy":{
            "name":{
                "value":"lisss",
                "fuzziness":2
            }	
        }
    }
}
通配符查询wildcard

通配符支持一定模式匹配,查询方式类似term的分词匹配,请求数据实例:

{
    "query":{
        "wildcard":{
            "name":"li*"
        }
    }
}
组合查询 bool

汇集其他查询为一体的复杂查询

should或

多个字段内容匹配,关系为或。请求数据实例:

{
    "query":{
        "bool":{
            "should":[
                { "match" : { "name":"zhangsan" }},
                { "match" : { "name":"lisi"}}
                ]
        }
    }
}
must与

多个字段内容匹配,关系为与。请求数据实例:

{
    "query":{
        "bool":{
            "must":[
                { "match" : { "name":"zhangsan" }},
                { "match" : { "name":"lisi"}}
                ]
        }
    }
}
must_not非

多个字段内容匹配,不是查询条件的内容。请求数据实例:

{
    "query":{
        "bool":{
            "must_not":[
                { "match" : { "name":"zhangsan" }},
                { "match" : { "name":"lisi"}}
                ]
        }
    }
}
range范围查询

数值数据类型使用range,可以实现数值范围查询,参数如下:

  • gt:大于
  • lt:小于
  • gte:大于等于
  • lte:小于登录
  • format:用于转换日期查询中的日期格式。如果为指定,则使用默认格式。
  • relation:指示范围查询如何匹配range的字段
    • INTERSECTS,默认值;使用具有与查找范围相交的范围字段来匹配文档
    • CONTAINS;使用范围字段值完全包含查询范围的文档进行匹配。
    • WITHIN;使用范围字段值完全在查询范围内的文档进行匹配。
  • time_zone:查询中的值转换为UTC的偏移量或是IANA时区
  • boost:用于减少或增加查询的相关性得分

查询age字段大于等于10,小于等于20,请求数据实例:

{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}
regexp正则匹配

通过正则表达式寻找匹配字段,搜索name值满足ac.*ha正则表达式的数据,请求实例如下:

{
  "query": {
    "regexp": {
      "name": "ac.*ha"
    }
  }
}
exists有值查询

查找文档字段是否有值,如查询name字段是否有值,请求实例如下:

{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}
missing无值查询

查找文档字段是否无值,查询name字段是否为空,请求实例如下:

{
  "query": {
    "missing": {
      "field": "name"
    }
  }
}
prefix前追匹配查询

字符串开头匹配,请求实例:

{
    "query":{
        "prefix":{
            "name":"ac"
        }
    }
}
排序+指定位置

_source指定响应字段,from返回结果的位置,size返回结果的最大条数,sort排序,请求数据实例:

{
    "_source":["name","description"],
    "query":{
        "match":{
            "name":"lisi?"
        }
    },
    "size":2,
    "from":0,
    "sort":{
        "age":{"order":"desc"}
    }
}
优化 term数值查询

查询默认使用评分计算,对文档执行包括或排除计算时,使用constant_score+filter以非评分模式且1作为统一评分查询。

//源查询
{
    "query": {
        "term": {
            "age": 30
        }  
    }
}
//优化查询
{
    "query": {
        "constant_score":{
            "filter":{
                "term": {
                    "age": 30
                }  
            }
        }
    }
}
总结
  • Elasticsearch知识学习有一定成果,入门水平,想真正用好,需要实践检验,只有理论的技术缺乏硬度。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号