写点什么

ElasticSearch 中 DSL 高级检索 (Query)

  • 2022 年 4 月 30 日
  • 本文字数:1594 字

    阅读完需:约 5 分钟

QueryDSL: 特定领域语言查询 传递数据 请求体中使用 json 的形式传递


requestBody 的形式


Get /索引名/类型名/_search


{


"query":{"match_all":{}}//查询所有


"size":20 //指定展示的条数


"from":0 //从第几条开始展示 1--0 2---1


"sort":[


{


"age":{


"order":"asc 升|desc"


}


}


]


}


[](()二、DSL 高级检索(Query)


===================================================================================

[](()0. 查询所有(match_all)

match_all 关键字: 返回索引中的全部文档


GET /ems/emp/_search


{


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


}

[](()1. 查询结果中返回指定条数(size)

size 关键字 : 指定查询结果中返回指定条数。 默认返回值 10 条


GET /ems/emp/_search


{


"query": { "match_all": {} },


"size": 1


}

[](()2. 分页查询(from)

from 关键字 : 用来指定起始返回位置,和 size 关键字连用可实现分页效果


GET /ems/emp/_search


{


"query": {"match_all": {} 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 },


"sort": [


{


"age": {


"order": "desc"


}


}


],


"size": 2,


"from": 1


}

[](()3. 查询结果中返回指定字段(_source)

_source 关键字 : 是一个数组,在数组中用来指定展示那些字段


GET /ems/emp/_search


{


"query": { "match_all": {} },


"_source": ["account_number", "balance"]


}

[](()4. 关键词查询(term)

term 关键字 : 用来使用关键词查询


GET /ems/emp/_search


{


"query": {


"term": {


"address": {


"value": "北京"


}


}


}


}


#1、只对 text 类型的数据进行分词


integer.keyWard lang double boolean ip 类型都不参与分词


#2、标准分词器分词时对中文单字分词 对英文单词分词


NOTE1: 通过使用 term 查询知 ES 中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词


NOTE2: 通过使用 term 查询得知,在 ES 的 Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词只有 text 类型分词



  • 关键字查询底层实现原理


[](()5. 范围查询(range)

range 关键字 : 用来指定查询指定范围内的文档


#range 范围查询 根据年龄搜索 0-10 等价于关系型数据库的 betweend--and

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

GET /ems/emp/_search


{


"query": {


"range": {


"age": {


"gte": 0,


"lte": 10


}


}


}


}

[](()6. 前缀查询(prefix)

prefix 关键字 : 用来检索含有指定前缀的关键词的相关文档

前缀查询(prewfix) like "x%"

GET /ems/emp/_search


{


"query": {


"prefix": {


"address": {


"value": "北"


}


}


}


}

[](()7. 通配符查询(wildcard)

wildcard 关键字 : 通配符查询 ? 用来匹配一个任意字符 * 用来匹配多个任意字符


#通配符查询(wildcard)

?匹配一个字符 *可以匹配多个字符

GET /ems/emp/_search


{


"query": {


"wildcard": {


"content": {


"value": "re*"


}


}


}


}

?匹配一个字符

GET /ems/emp/_search


{


"query": {


"wildcard": {


"content": {


"value": "sprin?"


}


}


}


}

[](()8. 多 id 查询(ids)

ids 关键字 : 值为数组类型,用来根据一组 id 获取多个对应的文档


#多 id 查询


GET /ems/emp/_search


{


"query": {


"ids": {


"values": ["dPMrnX0BfC_D9Fr1AcjP","c_MrnX0BfC_D9Fr1AcjP"]


}


}


}

[](()9. 模糊查询(fuzzy)

fuzzy 关键字 : 用来模糊查询含有指定关键字的文档


#fuzzy 模糊查询 用来模糊查询含有指定关键字的文档


#规则:

搜索关键词长度为 2 不允许存在模糊

GET /ems/emp/_search


{


"query": {


"fuzzy": {


"content": "北京"


}


}


}

搜索关键词长度为 3~5 允许一次模糊 把 mvc 写成 mvx

GET /ems/emp/_search


{


"query": {


"fuzzy": {


"content":"mvx"


}


}


}

搜索关键词长度为 5 以上 允许最大模糊数 2 个 将 spring 写成 xprinx

GET /ems/emp/_search


{


"query": {


"fuzzy": {


"content": "xprinx"


}


}


fuzzy 模糊查询 最大模糊错误 必须在 0-2 之间

搜索关键词长度为 2 不允许存在模糊 0

搜索关键词长度为 3-5 允许一次模糊 0 1

搜索关键词长度大于 5 允许最大 2 模糊

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
ElasticSearch中DSL高级检索(Query)_Java_爱好编程进阶_InfoQ写作社区