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

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15232214.html
Copyright © 2011-2022 走看看