使用ElaticSearch高级查询
高级查询
URL
- 1、url
get dangdang/order/_search?q=* q=*//查询所有 sort=price:desc//排序 size=5//查询条数 from=0//条数偏移量,从第0天开始,查询5条,与size同用可实现分页 //参数之间使用&隔开
查询结果解析:
{ "took": 3,//查询所用的时间ms "timed_out": false,//是否超时 "_shards": {//分片 "total": 5,//查询5个分片的数据和为一起为一个完整的数据 "successful": 5,//5个分片执行成功 "skipped": 0,//跳过0个 "failed": 0//失败0个 }, "hits": {//本次查询击中的数据 "total": 1,//查询的文档总数 "max_score": 1,//文档的最大得分,查询所有,得分一致 "hits": [//查询所击中的文档数组 { "_index": "dangdang",//当前文档的索引 "_type": "order",//类型 "_id": "1",//id "_score": 1,//得分 "_source": {//当前文档的原始内容 "id": "101", "name": "闫世坤", "price": "9999999.99", "count": "1" } } ] } }
DSL
- 2、DSL检索
GET dangdang/order/_search { "query": { "match_all": {}},//查询所有,与q=*等同 "size" : 2,//查询条数 "from" : 0//偏移量 与size同用可实现分页 "sort": [//排序 { "price": {//对price进行降序 "order": "desc" }, "count": {//对count进行升序 "order": "asc" } }, "_source": ["name","price"]//返回指定字段 }
- 分词查询(term)
GET dangdang/order/_search { "query": { "term": {//分词查询 "name": { //1.除text之外的其他类型都不分词 "value": "闫"//2.ES默认使用的是标准分词器, } //对英文进行单词分词, } //对中文进行,单字分词,查询时也应使用单个字, } //后期应改变es的默认分词器(IK) }
- 范围查询(range)
GET dangdang/order/_search { "query": { "range": {//根据范围查询 "price": {//文档属性 "gte": 10,//大于等于 "lte": 10000000//小于等于 } } } }
- 前缀查询(prefix)
GET dangdang/order/_search { "query": { "prefix": { "name": { "value": "闫世"//使用时应当对不分词的类型,进行前缀查询 } } } }
通配符查询(wildcard)? *
GET dangdang/orderr/_search { "query": { "wildcard":{ "name": { "value":"闫*"//?:一个任意字符,*:0-n个任意字符 } } } }
多id查询(ids)
GET dangdang/order/_search { "query": { "ids": { "values": ["jFZeR3YBKrAIu2rOHUBx","jVZeR3YBKrAIu2rOQkDC"] } } }
模糊查询(fuzzy)
- 模糊查询允许的出错率是在0-2之间,
- 0-2是有条件的
- 当查询条件长度为2时,是不能有错误的,需要全匹配
- 当查询条件长度为2-5时,允许一个错误
- 当查询条件>5时,允许有两个错误
GET dangdang/order/_search { "query": { "fuzzy": { "context": "abc--def" } } }
- 布尔查询(bool)
- must:相当与&&同时成立
- should:相当于||成立一个就行
- must-not:相当于!,不能满足任何一个
GET dangdang/order/_search { "query": { "bool": { "must": [ { "range": { "price": { "gte": 10, "lte": 9999999 } } } ], "must_not": [ { "ids": { "values": ["ilZYR3YBKrAIu2rO_ED0"] } } ], "should": [ { "prefix": { "name": { "value": "闫" } } } ] } } }
- 多字段分词查询(mulit_match)
- 先分词,再 根据你查询的字段长度和匹配值出现的次数的比例,来算出该文档的得分
GET dangdang/order/_search { "query": { "multi_match": { "query": "搜索的值", "fields": ["name","context"] } } } GET dangdang/order/_search { "query": { "query_string": { "query": "this AND that OR thus", "fields": ["name","context"], "analyzer": "simple"//使用指定分词器 } } }
测试分词器
GET _analyze { "analyzer": "simple", "text": ["测试simple分词器"] }
高亮查询
GET dangdang/order/_search { "query": { "term": { "context": { "value": "山" } } }, "highlight": { "fields": {"context": {}},//将那些字段值进行高亮处理 "pre_tags": ["<span style='color:red;'>"],//前标签 "post_tags": ["</span>"],//后标签 "require_field_match":false//关闭默认根据搜索的字段进行高亮 } }