文章目录

  • Query DSL (Domain Specific Language)
    • 一. 前置数据
    • 二. query
      • 1. 查询所有
      • 2.带参数查询
      • 3.分页
      • 4.精准匹配
      • 5._all搜索 (所有有索引的字段中检索)
    • 三. _score
    • 四. _source
    • 五. match 全文检索-Fulltext query
    • 六. Term
    • 七. Range
    • 八. Filter
    • 九. Boolean查询

Query DSL (Domain Specific Language)

一. 前置数据

DELETE product
PUT /product/_doc/1
{"name" : "xiaomi phone","desc" :  "shouji zhong de zhandouji","date": "2021-06-01","price" :  3999,"tags": [ "xingjiabi", "fashao", "buka" ]
}
PUT /product/_doc/2
{"name" : "xiaomi nfc phone","desc" :  "zhichi quangongneng nfc,shouji zhong de jianjiji","date": "2021-06-02","price" :  4999,"tags": [ "xingjiabi", "fashao", "gongjiaoka" ]
}
PUT /product/_doc/3
{"name" : "nfc phone","desc" :  "shouji zhong de hongzhaji","date": "2021-06-03","price" :  2999,"tags": [ "xingjiabi", "fashao", "menjinka" ]
}
PUT /product/_doc/4
{"name" : "xiaomi erji","desc" :  "erji zhong de huangmenji","date": "2021-04-15","price" :  999,"tags": [ "low", "bufangshui", "yinzhicha" ]
}
PUT /product/_doc/5
{"name" : "hongmi erji","desc" :  "erji zhong de kendeji 2021-06-01","date": "2021-04-16","price" :  399,"tags": [ "lowbee", "xuhangduan", "zhiliangx" ]
}

二. query

使用query关键字进行检索,倾向于相关度搜索,故需要计算评分。搜索是Elasticsearch最关键和重要的部分。

1. 查询所有

GET /product/_search


 GET copy_to/_search{"query": {"match_all": {}}
}

2.带参数查询

 GET product/_search?q=partlist.name:adapterGET product/_search?q=name:xiaomi

3.分页

from:第几条开始

size:展示的数目大小

sort:排序

GET product/_search?from=0&size=5&sort=price:asc

4.精准匹配

 # 日期GET /product/_search?q=date:2021-06-01

5._all搜索 (所有有索引的字段中检索)

DELETE product# 验证_all搜索
PUT product
{“mappings”: {“properties”: {“desc”: {“type”: “text”,“index”: false}}}
}# 先初始化数据
POST /product/_update/5
{“doc”: {“desc”: “erji zhong de kendeji 2021-06-01”}
}

三. _score

概念:相关度评分用于对搜索结果排序,评分越高则认为其结果和搜索的预期值相关度越高,即越 符合搜索预期值。在7.x之前相关度评分默认使用TF/IDF算法计算而来,7.x之后默认为 BM25。在 核心知识篇不必关心相关评分的具体原理,只需知晓其概念即可。

排序:相关度评分为搜索结果的排序依据,默认情况下评分越高,则结果越靠前。

四. _source

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping-source-field.html

  1. 禁用_source:

    1. 好处:节省存储开销

    2. 坏处:

      • 不支持update、update_by_query和reindex API。
      • 不支持高亮。
      • 不支持reindex、更改mapping分析器和版本升级。
      • 通过查看索引时使用的原始文档来调试查询或聚合的功能。
      • 将来有可能自动修复索引损坏。

      总结:如果只是为了节省磁盘,可以压缩索引比禁用_source更好。

  2. 数据源过滤器:

    Including:结果中返回哪些field

    Excluding:结果中不要返回哪些field,不返回的field不代表不能通过该字段进行检索,因为元数据不存在不代表索引不存在

    1. 在mapping中定义过滤:支持通配符,但是这种方式不推荐,因为mapping不可变

    2. 常用过滤规则

      • “_source”: “false”,
      • “_source”: “obj.*”,
      • “_source”: [ “obj1.*”, “obj2.*” ],
      • “_source”: {
        “includes”: [ “obj1.*”, “obj2.*” ],
        “excludes”: [ “*.description” ]
        }
# source 回显的include 和 exclue
DELETE product2
PUT product2
{"mappings": {"_source": {"includes": ["name","price"],"excludes": ["desc","tags"]}}
}PUT product2/_doc/1
{"owner": {"name": "zhangsan","sex": "男","age": 18},"name": "hongmi erji","desc": "erji zhong dekendeji","price": 399,"tags": ["lowbee","xuhangduan","zhiliangx"]
}GET product2/_search# source 返回指定
DELETE product2PUT product2
{"mappings": {"_source": ["owner.name", "owner.sex"],"query":{"match_all": {}}}
}# 不查询数据
GET product/_search
{"_source": false,"query": {"match_all": {}}
}

五. match 全文检索-Fulltext query

match_phrase

# multi_match 根据指定字段查询对应的分词
GET product/_search
{"query": {"multi_match": {"query": "phone huangmenji","fields": ["name", "desc"]}}
}
# match_all
GET product/_search
{"query": {"match_all": {}}
}
# math 分词查询
GET product/_search
{"query": {"match": {"name": "xiaomi phone"}}
}# math_phrase 段落匹配
GET product/_search
{"query": {"match_phrase": {"name": "nfc phone"}}
}

六. Term

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-term-query.html

# term 精确匹配
GET product/_search
{"query": {"term": {"name": "xiaomi phone"}}
}# term 和 match_phrase
GET product/_search
{"query": {"match_phrase": {"name": "xiaomi phone"}}
}# term
GET product/_search
{"query": {"term": {"name": {"value": "xiaomi phone" }}}
}# term和keyword区别
GET product/_mapping
GET product/_search
{"query": {"term": {"name": "xiaomi phone"}}
}GET product/_search
{"query": {"term": {"name.keyword": "xiaomi phone"}}
}# terms
GET product/_search
{"query": {"terms": {"tags": ["xingjiabi","buka"],"boost": 1.2}}
}

matchterm区别

原理解析

termmatch_phrase区别:

match_phrase 会将检索关键词分词, match_phrase的分词结果必须在被检索字段的分词中都包含,而且顺序必须相同,而且默认必须都是连续的

term搜索不会将搜索词分词

termkeyword区别

term是对于搜索词不分词,

keyword是字段类型,是对于source data中的字段值不分词


七. Range

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-range-query.html

# range
GET /product/_search?sort=price:desc
# [3999, 4999]
GET /_search
{"query": {"range": {"price": {"gte": 3999,"lte": 4999}}}
}# (3000, 4000)
GET /_search
{"query": {"range": {"price": {"gt": 3000,"lt": 4000}}}
}# [2021-06-01, 2021-06-02]
GET product/_search
{"query": {"range": {"date": {"gte": "2021-06-01","lte": "2021-06-02"}}}
}# [前一天, 今天]
GET product/_search
{"query": {"range": {"date": {"gte": "now-1d/d","lte": "now/d"}}}
}GET product/_search
{"query": {"range": {"date": {"time_zone": "+08:00", "gte": "2021-06-01","lte": "2021-06-02"}}}
}

八. Filter

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-filter-context.html

filter: 不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常使用的filter的数据,性能好

query:要计算相关度分数,按照分数进行排序,而且无法cache结果

GET product/_search
{"query": {"constant_score": {"filter": {"term": {"name": "phone"}},"boost": 1.2}}
}

九. Boolean查询

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-bool-query.html

bool查询是最常用的组合查询,根据子查询的规划,只有当满足其所有的子查询条件时,Elasitcsearch引擎回显结果

bool支持的子查询

  • must:必须满足子句(查询)必须出现在匹配的文档中,并将有助于得分。
  • filter:过滤器 不计算相关度分数,cache☆子句(查询)必须出现在匹配的文档中。但是不像 must查询的分数将被忽略。Filter子句在filter上下文中执行,这意味着计分被忽略,并且子句被考虑用于缓存。
  • should:可能满足 or子句(查询)应出现在匹配的文档中。
  • must_not:必须不满足 不计算相关度分数 not子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。由于忽略计分,0因此将返回所有文档的分数。

Elastic Search — Query DSL相关推荐

  1. ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search

    1.query string search 搜索全部商品: GET /ecommerce/product/_search took:耗费了几毫秒 timed_out:是否超时,这里是没有 _shard ...

  2. Elastic Search Java API(文档操作API、Query DSL查询API)、es搜索引擎实战demo

    elastic search实战小demo:https://github.com/simonsfan/springboot-quartz-demo,分支:feature_es 之前在 Elastic ...

  3. spring elasticsearch 按条件删除_Elasticsearch系列之Query DSL

    1 前言 我们先通过阅读官方文档,了解一下什么是 Query DSL . 1.1 Query DSL Elasticsearch provides a full Query DSL (Domain S ...

  4. elastic search java_在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  5. elasticsearch系列四:搜索详解(搜索API、Query DSL)

    一.搜索API 1. 搜索API 端点地址 从索引tweet里面搜索字段user为kimchy的记录 GET /twitter/_search?q=user:kimchy 从索引tweet,user里 ...

  6. Java Elastic search 常用查询

    java Elastic 客户端基本使用 引入jar compile 'org.elasticsearch:elasticsearch:5.5.0'compile 'org.elasticsearch ...

  7. java使用elastic search入门

    转自:https://www.ibm.com/developerworks/cn/java/j-use-elasticsearch-java-apps/ 如果您使用过 Apache Lucene 或 ...

  8. mysql和elastic search数据同步方案

    方案一 利用es api实时写入es中 优点:实时性高,能灵活控制写入es的时间 缺点:同步方案与业务逻辑耦合,严重依赖于es api,破坏了原有业务程序逻辑 demo:https://blog.cs ...

  9. Elastic search入门到集群实战操作详解(原生API操作、springboot整合操作)-step1

    Elastic search入门到集群实战操作详解(原生API操作.springboot整合操作)-step2 https://blog.csdn.net/qq_45441466/article/de ...

最新文章

  1. 第十八章 33用重载输出运算符函数实现字符串的输出
  2. 微软商店安装包_搞定你的数学问题:微软发布新APP可以手写或扫描数学题进行解答...
  3. php文件的作用,php入口文件的作用-PHP问题
  4. [转]Ubuntu terminator 无法打开解决方案
  5. ofo 退押金出新招;快手回应“弃拼多多联手阿里”;Julia 1.3 发布 | 极客头条...
  6. 《IT项目管理那些事儿》——CSDN蒋涛序
  7. 常见查找算法之—二分查找
  8. Git(6):使用git命令将本地项目提交至远程仓库
  9. Jeesite框架IDEA导入,部署,启动,打包
  10. 前端实现Word在线预览
  11. SpringMVC 通过Map、Model和ModelMap向页面传值
  12. css画横线箭头_css 画带边框的箭头的问题
  13. Qt快速转换路径(斜杠与反斜杠转换)
  14. Docker ROS dbus[xxx]: The last reference on a connection was dropped without closing the connection
  15. Vim插件#Vim Project项目管理
  16. 熊猫烧香的病毒制作源码
  17. 四轮毂电机车身姿态相关的传感器及其运用
  18. 云豹直播SQL注入漏洞
  19. iOS开发~Crash优化
  20. range在python中啥意思_range在python中是什么意思,

热门文章

  1. 教你一招,能解决90%的机房问题
  2. IC卡 PBOC指令
  3. Linux挂载磁盘分区
  4. 软文营销有什么价值?应注意什么?
  5. P1346 电车(floyd)
  6. Android 与 Unity(随笔录)
  7. 新浪分享 Insufficient app permissions!
  8. xboxone硬盘坏的表现_硬盘坏了,什么情况下自己可以来恢复出故障盘上的重要数据...
  9. 【竹梦令】生死梦. 连枝冢
  10. swiper3 loop 图片位置错乱问题