一文掌握系列之Es的DSL查询操作

这篇具有很好参考价值的文章主要介绍了一文掌握系列之Es的DSL查询操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ES在查询的时候非常方便,
笔者总结了Es的基础查询操作,供大家指正和学习。

match_all

全部查询,配合其他的操作进行数据的筛选,字段的筛选等,并且伴随着条件的增加,建议使用POST方式,

POST /index/_search
{
    "query": {
        "match_all": {}
    }
}
筛选字段

_source对需要的字段进行筛选。

分页

from a size b 拿到目的集合中索引为a到b的数据。

{
    "query": {
        "match_all": {}
    },
    "_source": [
        "id",
        "nickname",
        "age"
    ],
    "from": 0,
    "size": 10
}
排序

text类型无法排序,keyword类型可以,对于text,可以用它的.keyword进行排序,

 "sort": [
        {
            "age": "asc"
        },
        {
            "money": "desc"
        }
   ]
must

需要满足条件列表中的所有

term/terms

不进行分词搜索,仅仅支持一个字段的筛选,筛选出包含该字符的数据。

term精确匹配,不会进行分词。

terms则表示根据一个列表进行匹配。

对于text文本的信息,能够进行分词,则使用包含搜索信息分词的就能被成功筛选。

然而text类型也有个keyword,不支持分词,其值也text文本内容,用keyword需要全量输入搜索信息才能被成功筛选。

参考:https://blog.csdn.net/dg19971024/article/details/107103201

{
    "query": {
    	"terms":{
    	"name1":"霸王别姬"
    	}
    	
        "terms": {
            "name1.keyword": ["霸王别姬","肖申克的救赎"]
        }
    }
}
match

在查询时,是进行了分词的操作。查询包含某字符分词结果数据的信息。查询也有正则和前缀查询到时候搜。

对于查询的时候,如果是text类型,也可以使用它的.keyword进行相关查询,具体情况具体分析。

例如:我是你爸爸,被分词为 我,是,你,爸爸,筛选结果会是包含其分词结果的数据(具体条件可以定义)。

{
    "query": {
        "match": { 
             "name1": {
                "query": "我是你爸爸",
                "boost": 2
            } 
            }
    }
}

具体条件约束

名词 选择 说明
operator “or”/“and” 如我爱你,被分词我,爱,你,那么or的话含有任意一个分词就行,and则是需要都包含
minimum_should_match 一个百分数percent 目标字符串被分为n个词,筛选出出来的数据会包含n*percent个字符
boost 权重,不设置为1,提高权重设大于1的整数。
multi_match

多字段匹配,可以在每个字段后面添加^n,指定权重。各个字段也可以使用*代替前缀或者后缀。

POST /movie/_search
{
    "query": {
        "multi_match": {
             "query": "我是你爸爸",
            "fields": [
                "name1^2",
                "*_content"
            ],
             "type": "cross_fields"
            }
    }
}
参数
type
说明
best_fields 按照match检索,所有字段单独计算得分并取最高分的field为最终_score,虽然是默认值,但不建议使用,数据量上来后查询性能会下降
most_fields 按照match检索,融合所有field得分为最终_score
cross_fields 将fields中的所有字段融合成一个大字段进行match检索,此时要求所有字段使用相同分析器
Phrase 按照match_phrase检索,默认slop为0,执行短语精确匹配,所以即便设置 minimum_should_match 也无效; 取最高字段得分
phrase_prefix 按照match_phrase_prefix检索,滑动步长slop默认为0;取最高字段得分
bool_prefix 按照match_bool_prefix检索
tie_breaker

取值范围0-1,当type使用默认值 best_fields ,tie_breaker将会改变默认_score计算方式,采用best_field_score + tie_breaker*other_field_score。

analyzer

用户搜索输入词采用哪种解析器进行分词,默认使用mapping阶段指定的分词器;如果analyzer设置和索引阶段的分词器不一致时,且operator为and 那么在执行查询时可能理应完全匹配的短语结果检索为空的情况。

fuzziness

指定模糊程度,支持数字或auto

prefix_length

当使用模糊查询时,用来指定前缀不变长度

lenient

当查询报错时是否忽略该文档,默认为false

operator

匹配关系的逻辑判断,默认为or,当为and时表示所有输入词必须完全匹配

minimum_should_match

该参数生效的前提是operator为or,支持数字、百分比或者混合配置,

zero_terms_query

当用户输入词全部为停用词时是否返回文档,默认为none即不返回数据,设置为all时,查询将被改写为match_all

auto_generate_synonyms_phrase_query

是否开启同义词查询,默认为true

组合查询
must

是指要同时满足多个条件

should

满足一个条件就行。

must_not

都不满足。

filter

四者可以同时使用,里面都是方term/match

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "desc": "大学"
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "sex": "1"
                    }
                }
            ],
            "should": [
                {
                    "range": {
                        "age": {
                            "gt": "18",
                            "lt": "22"
                        }
                    }
                },
                {
                    "match": {
                        "desc": "毕业"
                    }
                }
            ]
        }
    }
}
过滤查询

进行范围筛选

{
    "query": {
        "match": {
            "desc": "大学"
        }
    },
    "post_filter": {
        "range": {
            "money": {
                "gt": 100,
                "lt": 1000
            }
        }
    }
}
高亮

将目标字符创高亮文章来源地址https://www.toymoban.com/news/detail-411640.html

{
    "query": {
        "match": {
            "desc": "沙僧"
        }
    },
    "highlight": {
        "pre_tags": [
            "<span>"
        ],
        "post_tags": [
            "</span>"
        ],
        "fields": {
            "desc": {}
        }
    }
}

到了这里,关于一文掌握系列之Es的DSL查询操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES高级查询语法DSL实战 - 第504篇

    历史文章( 文章 累计500+) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《国内最全的Spring Boot系列之七》 E

    2024年04月27日
    浏览(37)
  • 【ES专题】ElasticSearch 高级查询语法Query DSL实战

    个人在学习的过程中,感觉比较吃力的地方有如下: 语法结构比较陌生 没有中文文档, 只能看英文 其他博客也比较少介绍语法结构。比如说,为什么查询中会出现 query 有ES入门基础,且想进一步学习ES基本操作的朋友 系列上一篇文章:《【ES专题】ElasticSearch快速入

    2024年02月06日
    浏览(36)
  • 【ES系列】ES的数据结构与DSL语法

    本篇章将围绕ES的基本功能、实现原理与性能优化这三个方面,使读者能够逐渐深入了解ES的特点与能力。本篇所用的版本为7.10.2同kibana版本,需要注意的是,es与kibana至少在大版本上要保持一致,否则功能上会有兼容性问题。 ES的特征 分布式:ES是分布式的开源搜索和分析引

    2024年02月07日
    浏览(27)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL全文检索

    和术语级别查询(Term-Level Queries)不同,全文检索查询(Full Text Queries)旨在 基于相关性搜索和匹配文本数据 。这些查询会对输入的文本进行分析,将其 拆分 为词项(单个单词),并执行诸如分词、词干处理和标准化等操作。 全文检索的关键特点: 对输入的文本进行分析

    2024年01月22日
    浏览(43)
  • 【ElasticSearch-基础篇】ES高级查询Query DSL术语级别查询并结合springboot使用

    Elasticsearch 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 因Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,所以我们在使用springboot的时候也可以很方便的进行集成,本文主要讲述的就是使用springboot实现各类DSL的语法查询。 Elastics

    2024年02月01日
    浏览(39)
  • Elasticsearch 系列(四)- DSL实现自动补全查询

    本章将和大家分享如何通过 Elasticsearch 实现自动补全查询功能。 1、自动补全需求说明 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 2、使用拼音分词 要实现根据字母做补全,就必须对文档按照拼音分词。在 GitHub 上恰好有 Elasticsearch 的 拼音分

    2024年03月17日
    浏览(33)
  • RestClient操作文档和DSL查询语法

    注:一般不用上方地理查询,用下面方法! 算法了解 4.1、Function Score Query(修改相关性算分) 4.2、Boolean Query

    2024年02月16日
    浏览(34)
  • 【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【二】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月06日
    浏览(48)
  • 【MySQL】一文带你掌握聚合查询和联合查询

    概念: 聚合函数是一种用于处理数据集合的函数,它将多个数据行作为输入,执行特定的计算,然后返回单个结果。聚合函数通常用于统计和汇总数据,例如计算平均值、总和、最大值、最小值等。 常见的聚合函数包括: COUNT - 统计数据行数 SUM - 计算数据总和 AVG - 计算数据

    2024年02月08日
    浏览(32)
  • DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

    1. 简介   日常开发中需要查询 Elasticsearch 中的数据时,一般会采用 RestHighLevelClient 高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存储方案;不同关系数据库可以采用 Mybatis-Plus 方案屏蔽数据库的方言

    2024年01月17日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包