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的怀抱!

  • 相关阅读:
    四则运算出题系统,java
    Javaweb测试
    《构建之法》 读书笔记(6)
    使用ProcDump在程序没有响应时自动收集dump
    NASA关于如何写出安全代码的10条军规
    C#和C++中的float类型
    避免在C#中使用析构函数Finalizer
    C#性能优化的一些技巧
    从bug中学习怎么写代码
    Code Smell那么多,应该先改哪一个?
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15232214.html
Copyright © 2011-2022 走看看