Elasticsearch中的Term查询和全文查询

“analyzer”: “standard”,

“text”: [“lonely wolf”]

}

在这里插入图片描述

可以看到,lonely wolf 被分成了 lonelywolf 两个单词,所以我们将 lonely wolf 作为一个进行查询自然是无法查询到结果的。

这里有个地方需要注意,如果我们存入的是大写单词,如 Lonely Wolf,分词器也是一样的结果,也就是会将大写字母统一转化为小写进行存储,所以进行全文查询的时候也是无法查询出结果。

exists 查询

用来判定是否存在某一个字段,返回包含字段的任何索引值的文档。

GET index_002/_search

{

“query”: {

“exists”: {

“field”: “address”

}

}

}

这里返回的结果就是第三条和第四条数据,像 null 值和空数组 [] 不会被返回。

如果想要返回 null 值或者空数组 [] 的数据,那么可以利用 bool 查询的 must_not 语句:

GET index_002/_search

{

“query”: {

“bool”: {

“must_not”: [

{

“exists”: {“field”: “address”}

}

]

}

}

}

fuzzy 查询

用于近似查询,比如我们有时候在用百度搜索的时候,输错了字会被纠正:

在这里插入图片描述

一般情况下有一个单词错误的情况下,fuzzy 查询可以找到另一个近似的词来代替,主要有以下场景:

  • 修改一个单词,如:box—>fox

  • 移除一个单词,如:black–>lack

  • 插入一个单词,如:sic–>sick

  • 转换两个单词顺序,如:act–>cat

为了可以查询到这种近似的单词,fuzzy 查询需要创建一个所有近似词的集合,这样搜索的时候就可以采用精确查询找到近似的词来代替查询。

比如下面这个查询就可以查询出前面四条数据,同样的,value 修改为 loneyllonelyyloneyle 都能查询出前面四条数据:

GET index_002/_search

{

“query”: {

“fuzzy”: {

“name”: {

“value”: “lonel”

}

}

}

}

ids 查询

通过文档 id 进行查询返回,这里的 id 为文档中的 _id

GET index_002/_search

{

“query”: {

“ids”: {

“values”: [“id1”,“id2”]

}

}

}

prefix 查询

通过指定字段的前缀进行查询。

GET index_002/_search

{

“query”: {

“prefix”: {

“name”: {

“value”: “lo”

}

}

}

}

range 查询

通过范围进行查询。

GET index_002/_search

{

“query”: {

“range”: {

“id”: {

“gte”: 1,

“lte”: 2

}

}

}

}

其中:

  • gt:表示大于。

  • gte:表示大于等于。

  • lt:表示小于。

  • lte:表示小于等于。

这种范围查询还可以用于日期的范围查询,此时将会对日期进行毫秒数转换后进行查询,如下面的例子就是查询昨天到今天的区间,而且可以通过 time_zone 指定时区:

GET _search

{

“query”: {

“range” : {

“timestamp” : {

“gte” : “now-1d/d”,

“lt” : “now/d”

}

}

}

}

regexp 查询

通过正则表达式进行查询。如下例子可以查询出 lon 开头的所有数据:

GET index_002/_search

{

“query”: {

“regexp”: {

“name”: “lon.*”

}

}

}

term 查询

返回一个或者多个单词精确匹配的文档。

返回前面四条数据

GET index_002/_search

{

“query”: {

“term”: {

“name”: {

“value”: “lonely”

}

}

}

}

只返回第一条数据

GET index_002/_search

{

“query”: {

“term”: {

“name.keyword”: {

“value”: “lonely wolf”

}

}

}

}

terms 查询

terms 查询和 term 查询是一个含义,区别只是 terms 可以一次精确匹配多个词。

返回全部五条数据

GET index_002/_search

{

“query”: {

“terms”: {

“name”: [

“lonely”,

“wolf”

]

}

}

}

terms_set 查询

terms_set 查询和 terms 查询是一样的查询规则,不同的是 terms_set 查询可以定义匹配词项的数量,定义的数量只能从文档中的某一列中进行获取或者使用脚本进行配置:

这里只能查询第一和第三两条数据,因为 Wolf 中的首字母大写,无法被精确匹配上,count列不能是text类型

GET index_002/_search

{

“query”: {

“terms_set”: {

“name”: {

“terms”: [

“lonely”,

“Wolf”

],

“minimum_should_match_field”: “count”

}

}

}

}

type 查询

指定类型查询,type 类型在 7.0 版本已经标注为过期,8.0 版本已经被废弃。

wildcard 查询

通过通配符进行查询,这个可以理解为是简易版本的正则表达式查询:

GET index_002/_search

{

“query”: {

“wildcard”: {

“name”: {

“value”: “lone*”

}

}

}

}

全文查询


高级全文查询通常用于对全文字段 text 类型(比如电子邮件的正文)进行全文查询。全文查询在搜索和索引时,都会对字段进行分词处理,查询之前会先对输入的词进行分词处理,然后对每个词项进行查询,最后将结果进行合并,并根据算分结果将结果进行返回。

全文查询也包括很多种,在这里我们主要介绍 match 查询和 match_phrase 查询。

match 查询

match 查询是执行全文搜索的标准查询,包括模糊匹配选项。如下就是一个标准的 match 查询语句:

返回全部5条数据

POST index_002/_search

{

“query”: {

“match”: {

“name”: “lonely wolf”

}

}

}

对比 term 查询:

没有满足条件的结果

POST index_002/_search

{

“query”: {

“term”: {

“name”: “lonely wolf”

}

}

}

返回第一条数据

POST index_002/_search

{

“query”: {

“term”: {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
term": {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-lcES61DB-1715295487640)]

[外链图片转存中…(img-bj9mXDo2-1715295487640)]

[外链图片转存中…(img-HlJYLgMl-1715295487640)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Term查询Elasticsearch一种基本的查询方式,用于查询一个字段包含指定关键词的文档,类似于MySQL的等值查询。使用Term查询时,可以对字段进行完全匹配,且区分大小写。其基本语法如下所示: ``` GET /{index}/_search { "query": { "term": { "{field}": "{value}" } } } ``` 其,`{index}`表示查询的索引名称,`{field}`表示需要查询的字段,`{value}`表示需要匹配的值。Term查询只能用于匹配该属性的单个值,若想匹配多个值,可以使用Terms查询Terms查询的基本语法如下所示: ``` GET /{index}/_search { "query": { "terms": { "{field}": [ "{value1}", "{value2}", "{value3}" ] } } } ``` 在Java代码,可以使用`termsQuery`方法来构建Terms查询,如下所示: ```java TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field", "value1", "value2", "value3"); searchSourceBuilder.query(termsQueryBuilder); ``` Term查询还可以配置其他参数,如超时时间等。在Java代码,可以通过设置`timeout`来指定查询超时时间,如下所示: ```java searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); ``` 以上是关于Elasticsearch Term查询的基本用法和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Elaticsearch查询 -Term查询](https://blog.csdn.net/weixin_43796428/article/details/131283196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值