分享好友 最新动态首页 最新动态分类 切换频道
es语法模糊匹配 es keyword 模糊匹配
2024-12-26 14:19


es语法模糊匹配 es keyword 模糊匹配

  1. 你会一直用代码去操作Oracle、MySQL、Mongo、Redis吗?
    不会,你会找一个工具来方便直接操作数据库,那么用Kibana操作ES就是这么一个工具;
  2. 在Kibana里快速了解与实践ES有哪些接口、分别能做什么,加深对其功能与数据结构的了解;
  • 在浏览器访问你的Kibana地址(我本机是 localhost:5601);
  • 在左侧导航菜单找到Dev Tools并点击;
  • 看到一个左右分栏的页面, 现在我们在左分页输入一个指令看看
    这是查看ES的健康状况,如果使用的是单节点,状态会始终是 yellow 不会是 green。想要绿还得多节点运动。

直接插入一条数据来自动创建索引

  • 当插入一条数据时,如果ES原本没有这个index,系统默认会自动创建该索引,我们来试试:

你会得到下面的返回:

  • 我们来查询一下该数据是否已存在:

返回回来了:

是的,老乔尔在这里了,还没有被干掉,向乔尔敬个礼,最后生还者2的编剧夹带了太多私货,还有天理吗?还有王法吗?这样做你的良心不会痛吗?
不能像我一样做个不加带私货,就单纯讲讲技术~~(私货)~~ 的人吗。

  • 使用过旧版ES的老司机会纠结type,在ES7开始已经取消了type,_doc在API里也是一个关键字,类似效果的还有下面这个API:

是不是很方便,不用像关系型数据库一样还要建表,直接插入数据就表也有了,数据也有了,有了这样的电动车还要啥自行车?


自行车还是要的,毕竟电动车还要电,没电的时候怎么办呢?难道用爱发电?不要骗自己了,程序员哪里有爱?所以我们一起来看看自行车吧。

正儿八经创建一个index

之前怎么就不正儿八经了?


ES的数据存入后,还记得前言中数据入库到建立索引的过程吗?一大精华就是如何将你的数据建立索引,如果你不告诉ES,他是不知道的,那么就只能自己匹配了,在简单的应用场景下没有什么问题,可是如果想把你的电动车玩成酷炫的改装痛车,那么就要为你的每个零件做定制,现在我们就先来看看如何为不同字段指定类型。

我们先删除刚才创建的index:

接下来我们重新建立索引 character:

上面的命令让我们建立了一个新的index -> character,其中的mappings下的properties,我们指定了字段的属性,我们将name的属性设为keyword,那么它将不会进行分词,而是整个被索引,这就和其他数据库的索引在效果上一样了。

ES有以下这些基本类型:

核心数据类型:
  • string
    text, keyword, wildcard
  • Numeric
    long, integer, short, byte, double, float, half_float, scaled_float
  • Date
    date
  • Date nanoseconds
    date_nanos
  • Boolean
    boolean
  • Binary
    binary
  • Range
    integer_range, float_range, long_range, double_range, date_range, ip_range
复合数据类型:
  • Object
    单个json类型
  • Nested
    一组嵌套的json类型
地理位置数据类型:
  • Geo-point
    geo_point 经纬度坐标点
  • Geo-shape
    geo_shape 一个多边形区域

克隆索引

克隆的命令很简单,不过有一些注意事项,克隆只需要这样就可以:

这里要注意一些前提条件

  1. 你的ES节点健康度必须是绿的,不绿不行;
  2. 将现有index变为只读,如何变为只读呢?

删除与关闭index

删除

当你想抹去某个index的存在时,就使用该命令,如果你的原始数据在别的库,ES仅仅作为一个索引库时,该操作影响相对有限,否则那就真的是从删库到跑路了:

关闭

当你想要保留某个index又不想人读写它时,就用该命令:

如果已经建立了index,我们自然想要看看这个index到底存在不存在,到底长啥样,对吧。

我有多少index

在kibana中输入下面命令看看你刚才创建的index在吗?没有建或者已删库?

在里面看到你的index了吗?

查看具体某个index

现在你想知道某个具体的index,看看他的properties,又几个副本,什么时候创建的,以及是否有特殊settings?这个命令也很简单:

你也可以用如下命令来判断某个index是否存在,如果存在会返回200,不存在则返回404。

自带ID的数据插入

我们在做数据插入时,可以为数据指定ID,这样系统在存入数据时ID就会是我们传入的值,我们来看看怎么做

这里的返回数据会告诉我们,数据的ID为2,那么我们如果不指定ID呢?不指定的时候会怎样呢?让我们来看看,老乔尔走起:

自动生成ID

我们来看看返回数据:

ID是一串随机生成的字符串,当然我们可以修改ID的激活规则,自动生成ID的规则由settings中的action.auto_create_index控制:

添加超时时间

ES的写入效率并不是特别高,在实际生产环境中,我们总要考虑网络IO的耗时以及其所带来的线程占用及可能的应用崩溃,而在微服务中不考虑这样的问题甚至可能造成系统的雪崩,所以我们希望系统能够快速失败,失败后我们可以重试也可以选择其他降级方案,ES也为我们提供了这样的能力,可以让我们快速失败:

看看这个index下的所有documents

我们有时候就想随便看看一个数据库表中的一些数据,我们对于数据的感觉常常要看到这些数据才会有,这时候我们要怎么做呢?

不带任何参数,是不是很简单。

查看具体ID的数据

只返回特定字段

这时我们只要在调用时添加要返回的source字段即可:

现在我们已经会根据ID查询了,虽然和想象的不太一样,因为我们想要的不应该是用ID来查询,我们想要根据关键字就找到数据。

不要急,我们要循序渐进让你找到感觉,这种感觉就是在轮环中前进,接下来让我们看看更高级的用于搜索的奇巧yinji(哎呀我这输入法怎么坏了打不出来了)


憋说话,开搞!

特定属性值

我们想要找到乔尔,但是我们并不知道他的ID,我们只记住了他的名字,可怜的老乔尔,让我们试试找到他吧。

我们找到乔尔了,但是这样是不是会感觉比较乱?那么我们来这样试试:

以前有小伙伴质疑过这样的请求不是应该是POST吗? GET要跟在URI后面,其实不是这样的。

对返回数据做分页与排序

我们要找到所有描述中带“最”字的数据,然后根据年轻倒序排序,并返回前两个,我们来看看怎么做吧:

复杂查询条件

上面我们的查询条件还是比较单一,要知道再SQL里面我们可以有各种 AND, OR, NOT 以及括号操作,在这里我们要怎么办呢?

我想要描述里带最的数据,同时年龄要大于16岁小于等于46岁的,怎么办呢?居然还有这么骚的操作?


那么我们来看看怎么在查询中满足要求:

  • bool 关键字表示我们要进行组合查询;
  • must 表示里面的条件都要满足,类似于SQL的AND关键字;
  • should 表示其中的条件满足其一就可以,类似于SQL的OR;
  • must_not 表示不需要满足该条件,类似于SQL的NOT;
  • 这里我们使用了与 must 并列的 filter,这里面可以输入多个条件,它只是根据条件做数据过滤,不进行打分等操作,在性能上优于match的查询,因此如果我们需要快速缩小查询范围时,就可以用filter。

模糊搜索与同义词搜索

模糊搜索

当我们在query中使用 match 时,他默认已经支持了模糊搜索,这里的模糊搜索与我们在关系型数据库中的含义不太一样,在关系型数据库里表示我们要使用 LIKE 了,但是在ES里,表示我们输错了一两个字,它依然帮我们把数据找出来。
让我们试试下面的搜索条件:

我们的数据依然返回了,但是大家看到几条数据的score值,都没有满分,因为我们有错别字。

同义词

该功能的使用需要对同义词做一些配置,这样我们就可以简化搜索,比如:
tlou = the last of us
这里我们不对这一块深入讲解了,因为其难点不在使用。

同一关键字在不同字段匹配

这个可以认为时对于 bool 操作的简化,我们来试一试:

到这里,已经很累了,感觉已经精疲力尽了,饭也没吃厕所也没上的写,我们终于要开始做数据删除了,这个篇章也就快要接近收尾了。

根据ID删除数据

这个语法比较简单,不过要注意不要一不小心删除了整个index

根据查询条件删除

我们来让艾比离开最后生还者的世界吧:

这样艾比就不见了,我们用_search去找时,再也找不到她了,TLOU的世界清净了。

是不是似曾相识的语法? 如果你很好的掌握了上面的复杂查询,那么这里将没有任何难度。

BTW,如果艾比的形象和艾莉丝与蒂法差不多,我们还是可以让她留下来并且接受她成为主角。

根据ID覆盖原数据

这个操作会根据id,覆盖原本的数据,不会只修改你提交的字段:

这样提交后,ID为2的数据,就没有name与game属性了,那么显然这不是我们想要的。

只修改有变动的自动

通常我们只想要修改要改变的字段,没有变动的字段保持原样,那么我们该怎么做呢?

这样提交后原本的name与game属性则不会发生变化。

根据查询条件进行数据修改

是的,现在我们并不知道数据的ID,我们想要找到艾莉,在我们写这段分享的漫长过程中,艾莉又长大了一岁,真是光阴似箭岁月如梭,艾莉已经19岁了,我们应该怎么办呢?

query的部分依然参考上面的复杂查询模块,script是一个新知识点,但是我们也不做展开了,我们只要理解 “source”: “ctx._source[‘age’] = 19” 是将查询到的数据的age字段改为19就可以了。

关于通过Kibana进行ES的CRUD操作,我们就介绍到这里了,不知不觉这已经是一篇万字长文了。

下一步,我们就要移步到通过 Springboot 与 Spring Data Elasticsearch 来使用ES了。想想还有些小激动,是不是。


最新文章
2024年最佳AI聊天机器人推荐及对比
价格:免费版无需账号,ChatGPT Plus为$20/月,提供增强功能。最佳ChatGPT替代方案:MicrosoftCopilotMicrosoft Copilot特点:免费计划/$20月度订阅优点:多模态功能、与Microsoft生态系统的无缝整合缺点:依赖Google生态系统、隐私问题作
(英国名牌大学排第一)英国名牌大学排行榜 英国有哪些名牌大学
(英国名牌大学排第一)英国是一个位于欧洲西部的高度发达的资本主义国家,也是国际上很有影响力的大国之一,不仅经济发展水平位居世界前列,还拥有众多世界著名的高等学府,那你知道英国名牌大学有哪些?现在小编为大家介绍英国名牌大学排行
Bootstrap - 响应式布局
@就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。设备的划分情况:设备划分尺寸区间超小屏幕(手机) 768px小屏设备(平板)= 768px~ 992px中等屏幕(桌面显示器)=992px~ 1200px宽屏设备(大桌面显示器)= 120
CF周边商城,燃情夏日购
活动规则活动时间:8月17日15:00 - 8月30日24:00活动期间,每购买event1“夏日返利购,道具任你挑”活动指定商品1个,即可获得指定道具礼包1个,多买多送,单用户限领3次。活动期间,在本活动页面或聚诚品CF周边商城购买任意周边,订单实际
2024年上海市冷柜产品质量监督抽查结果公布
样品标称名称标称商标标称规格型号标称生产日期/批号标称生产者名称被抽样生产者、销售者被抽样销售者所在商场/电商平台认证机构变温冷冻冷藏箱星星BD/BC-103GA22-12-15/-浙江星星冷链集成股份有限公司上海市金山区枫泾镇先锋家电经营部/ /
8000万台大单在路上!信创PC加速起飞
近年来,中国信息技术应用创新产业升温。据艾媒咨询,2023年信创产业规模已超2万亿元,预计2027年将突破3.7万亿元。整机市场正成为企业技术创新和业务发展的热点。业内人士认为,信创电脑产业的破局之道在于更快的CPU、软硬件深度结合优化
Docker Buildx插件安装与使用指南
docker-buildx-plugin-0.15.1-1.el8.x86_64.rpmDocker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中,然后可以发布到任何流行的 Linux 机器上,也可以实现虚拟化。Dock
2024-2029年全球及中国有色金属产业市场前瞻与投资战略规划分析报告
权威数据来源一手调研资料调研方法直接观察法(实地走访、网络观察)访谈调查法(个别面访、集体面访、电话访谈、视频访谈、小组座谈)问券调查法(在线问券、电子邮件问券、入户分发等)会议调查法(参加博览会、展览会、高峰论坛、研修会
Docker学习笔记1,Docker创建Tomcat容器并且部署web项目。
使用docker部署俩tomcat,模拟负载均衡。 1.首先去这个网站查看你需要下载的版本对应的标签https://hub.docker.com/u/library 2.然后docker pull tomcat:你的标签。当然,不加标签的话一般默认使用最新版即lasted 3.拉下来镜像
2025上海CMEF医疗器械展/2025养老展/2025中医AI设备展
2025年将迎来医疗行业的一次盛事——上海CMEF医疗器械展、养老展以及中医AI设备展。这一次展会不仅是各大医疗器械生产企业展示Zui新技术的舞台,也是专业人士交流经验、了解行业动态的重要平台。CMEF(全称:中国国际医疗器械博览会)创始
相关文章
推荐文章
发表评论
0评