zoukankan      html  css  js  c++  java
  • elasticsearch搜索语法梳理 · 贰

    前言

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

  • 相关阅读:
    【bzoj4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
    【bzoj4383】[POI2015]Pustynia 线段树优化建图+差分约束系统+拓扑排序
    【bzoj4519】[Cqoi2016]不同的最小割 分治+最小割
    【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割
    【bzoj3689】异或之 可持久化Trie树+堆
    【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
    【bzoj2780】[Spoj]8093 Sevenk Love Oimaster 广义后缀自动机
    【bzoj4804】欧拉心算 欧拉函数
    【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
    【bzoj3589】动态树 树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15232214.html
Copyright © 2011-2022 走看看