elasticsearch搜索语法梳理 · 贰
共 2915字,需浏览 6分钟
·
2021-09-01 22:57
前言
我今天本来相好的名字是“Elasticsearch
正式深入学习”,因为按照官方文档的章节安排,入门部分的内容已经结束了,所以今天应该算是开始更系统的学习,而且今天分享的内容也并非与搜索相关,但是为了和昨天的内容保持队形,我就延续了昨天的名称。
昨天我其实已经算是对elasticsearch
做了一个我自己的定性——一套独立的知识体系,所以从今天开始,我觉得有必要对elasticsearch
的学习策略做一定的调整:未来会不定期分享es
的相关内容,而且尽可能会以分享小知识点的方式来展开,所以暂时不会把es
作为核心创作对象来更新。具体原因我放在文末了,感兴趣的小伙伴可以去看下。
今天我还会继续分享关于搜索的知识点,但是内容方面不会有太多进展,好了,下面我们直接看今天的内容吧!
elastsearch搜索
精确查找
精确值查找,也就是通过filters
进行数据过滤,过滤器是es
的核心功能,它本身执行速度很快,不会计算相关度,而且很容易被缓存。
term查询
term
就属于filters
的一种,可以用它处理数字(numbers
)、布尔值(Booleans
)、日期(dates
)以及文本(text
)。下面我们看下term
具体如何使用。
首先,我们假设有这样一个场景,我们需要查询公司职员中,年龄为25
的所有职工,在传统数据库中,我们是这样查询的:
SELECT *
FROM employee
WHERE age = 25
如果在elasticsearch
中,要实现上面的查询,我们可以这样操作:
curl -X GET "localhost:9200/megacorp/employee/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query" : {
"constant_score": {
"filter": {
"term" : {
"age" : 25
}
}
}
}
}
'
这里的term
语法块就类似于传统数据库中的where
语句,其中constant_score
的意思是以非评分模式来执行 term
查询并以一作为统一评分(_score
)。
运行结果如下:
在测试的过程中,我发现下面这样查询,结果和上面的结果是一致的:
curl -X GET "localhost:9200/megacorp/employee/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query" : {
"term" : {
"age" : 25
}
}
}'
返回结果如下:
也不知道这两种查询方式有啥区别(有的懵逼)。
好了,关于es
的搜索今天就分享这一个知识点,后面等我梳理出相关语法规则后再来补充相关知识(果然打脸了,两天没有梳理完)
总结
还是昨天的老调子,es
这个坑确实比较深,我感觉我现在连坑底都没到,所以后面还需要进一步深入学习,等坑踩到底了,就该往上爬了,所以今天就只能分享这么多了。
下面先说下我要变更es
内容更新策略的原因,简单说起来就两点:
一是目前我确实也对es
知之甚少,在不清楚的情况下,分享出来的内容,难免脱离实际应用场景,难免误人子弟,而且吧,我目前还没有接触到正式应用场景下的es
,很多想法并没有经过验证,所以好多观点就比较主观了;
第二个原因其实和第一个差不多,因为没有线上的应用需求,所以目前学习效率也不高,加上es
又是一个持久战的学习,而我最近又比较忙,暂时也没有那么多时间深度学习,所以如果强行更新es
相关内容的话,最终的结果很可能是,写出来的东西我自己都觉得没意思,没价值,完全是为了内容更新而写,这样也就违背了我最开始做内容分享的初衷。
综合上面两个原因,我最终决定,以后还是继续以我比较擅长的java
领域为核心进行内容创作,至于java
之外的内容,看个人兴趣和掌握程度,如果我兴趣比较大,比较喜欢的话(比如linux
),那我大概率还是会继续分享,因为有钱难买我愿意呀!好了,今天的内容就先到这里吧,我们明天开始回归java
的怀抱!