EC的农地辣麽大,作物辣麽多,来认真找作物了(2)ES的逐一说文解字-Range & 常用的旁支末节

来到了倒数第二天
真是快被榨乾了呢(还真是没料 (┐「﹃゚。)
但说好写三十篇技术文就是要灌满三十天!!!

那麽今天也是忙碌且突然的开始罗!!

第一段参考文献
首先我们知道Lucene能够将字串直接拿来解析做查询
爲了方便再把之前的东西贴过来

gt: > 大於(greater than)  
lt: < 小於(less than)  
gte: >= 大於或等於(greater than or equal to)  
lte: <= 小於或等於(less than or equal to  )

Range

那样的事情我们叫做

  1. 字串决定查询类型
    官方定义有两种
    1. TermRangeQuery
    2. NumericRangeQuery

详文请见小农的前篇

  1. 日期字串的范围查询 参考文档
//关键词有以下
y-Years、M-Months、w-Weeks、d-Days、h-Hours、H-Hours、m-Minutes、s-Seconds

对范围搜所有三个可以共用的概念
1. Date Math
2. Date Math to round
3. 日期格式(依据预设日期格式与指定时区进行检索)

假设今天想要查询目前月整个月份,资料
gte就会查询大於等於的日期(经过四舍五入)
lte就会查询小於等於的日期(经过四舍五入)
假定 now 2020-10-13 (写的文章时间)

//Date Math 
{
    "query": {
        "range" : {
            "createAt" : {
                //这样就会查询出十月後的资料
                "gte" : "now/M",
            }
        }
    }
}
//这样的话就等同於
//mysql:where createAt >= "2020-10-01 00:00:00" 
//Date Math to round 
{
    "query": {
        "range" : {
            "createAt" : {
                "gte" : "now-1d/d",
                "lt" :  "now/d"
            }
        }
    }
}
//这样的话就等同於
//mysql:where createAt >= "2020-10-13 00:00:00" and createAt  < "2020-10-14 00:00:00"
//日期格式
{
    "query": {
        "range" : {
            "createAt" : {
                "gte": "13/10/2020",
                "lte": "2021",
                "format": "dd/MM/yyyy||yyyy",
                "time_zone": "+08:00"
            }
        }
    }
}
//mysql:where createAt >= "2020-10-13T00:00:00Z" and createAt < "2021-01-01T00:00:00.000Z"

欸~基本最难得日期范围检索大概就这样了
多用几次就习惯了,虽然我也是从专案起用到专案快结束了才习惯呢~

ES 的旁支末节

1. Bool:这东西整天看到,但到底是啥?感觉有点像Boolean?

欸~如果看官有这种感觉,那很有天份呢~

其实Bool query就是最少一个的布林子句所够成
也就是说每个子句结果最後吐出都必须爲true or false
然而这个常出现的母集合其实只有四种子句
也就是我们上篇所提到的

  1. filter
  2. must
  3. must_not
  4. should

2. bulk:要塞的东西太多笔了,要不一次挤进去吧-ES的insert doc 批量操作

这样的话就可以一个请求写入多笔资料了

POST _bulk
{"index":{"_index":"it_help","_type":"_doc","_id":"1"}}
{ "id" : 2,"content":"我爱台湾,国庆快乐" }
{"index":{"_index":"it_help","_type":"_doc","_id":"2"}}
{ "id" : 2,"content":"我爱台湾,国庆快乐" }
{"index":{"_index":"it_help","_type":"_doc","_id":"3"}}
{ "id" : 3,"content":"爱台湾,国庆快乐" }
{"index":{"_index":"it_help","_type":"_doc","_id":"4"}}
{ "id" : 4,"content":"国庆快乐,全国爱台湾" }

3. ES的get? url Search

参考文档

范例:GET /{index}/_search?q=username:jacky

其中呢username=Field,jacky就是我们要找的值啦

参考文档
下面列出比较常用的参数呢爲荣

  • df:预设字段,不指定时会对所有字段进行查询
  • sort:根据字段名排序
  • from:返回的索引匹配结果的开始值,默认为 0
  • size:搜索结果返回的条数,默认为 10
    //分页就靠上面这两个,每次查询多少,查到第几页
  • timeout:超时的时间设置
  • fields:只返回索引中指定的列,多个列中间用逗号分开
  • analyzer:当分析查询字符串的时候使用的分词器
  • analyze_wildcard:通配符或者前缀查询是否被分析,预设为 false
  • explain:在每个返回结果中,将包含评分机制的解释
  • _source:是否包含元数据,同时支持 _source_includes 和 _source_excludes
  • lenient:若设置为 true,字段类型转换失败的时候将被忽略,默认为 false
  • default_operator:默认多个条件的关系,AND 或者 OR,默认为 OR复杂布林查询用的

第29篇终於结束了
来回去加班罗~


对於文章中的任何用词与专业字或都可以在下面

梗图看不懂也行

蔽农会带着谦卑爲怀的心情竭尽所能回覆与说明的


<<:  [Day 30] LeetCode - 125 Valid Palindrome

>>:  Day 30 / 结语

Day04 - 事件、状态转移

我们必须记忆一个主体的状态,以便系统後续进行判断、操作或其他使用,为此我们也在 Day 03 厘清「...

告诉自己:你做得好

每天赛跑 铁人赛要迈入下半场了,回顾前半场...,每天回家吃完饭剩下 3-4 小时可以来写稿 偏偏假...

[DAY 11]让BOT 24小时在线(2/3)

今天继续介绍如何在云端服务器上持续开启bot 但在进入replit之前需要在GitHub专案放进两个...

Day22 - 用 Ruby on Rails 处理台湾证券交易所资料-DB 设计

前言 有了前 2 篇从「台湾证券交易所」取得 CSV 档後,接着要把资料存入 DB,在存入前,需要先...

第三十天:UI切版 & 元件-第五部分情境练习(注册表单、产品清单、登入页面)

铁人赛的最後一天 以三个前端比较常见的情境练习需求来总结第五部分 今天的内容 一、注册表单 二、产品...