elasticsearch搜索语法梳理 · 贰

云中志

共 2915字,需浏览 6分钟

 · 2021-09-01

前言

我今天本来相好的名字是“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的怀抱

- END -


浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报