“analyzer”: “standard”,
“text”: [“lonely wolf”]
}
可以看到,lonely wolf
被分成了 lonely
和 wolf
两个单词,所以我们将 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
修改为 loneyl
或 lonelyy
或 loneyle
都能查询出前面四条数据:
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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!