Elasticsearch--预匹配器
当你对一个无限输入数据流进行操作并搜索特定事件的出现时,可以使用此模型。可以用于检测监控系统中的故障。
在新版本中的知识点位置https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-percolate-query.html
示例索引
所有关于预匹配器的例子,都使用一个叫做notifier的索引,创建命令如下:
curl -XPOST ‘localhost:9200/notifier’ -d '{
"mapping":{
"book":{
"properties":{
"available":{
"type":"boolean"
}
}
}
}
}'
这里只定义了一个字段,其他字段类型靠es猜测
预匹配器的准备
一个预匹配器看上去像一个普通的elasticsearch索引一样,然而预匹配器允许我们倒转逻辑:对查询建立索引,然后发送文档给elasticsearch,看看索引中那个索引被匹配到。假设任何与预定义条件匹配的图书变得可用时,通知用户:
{
"query":{
"bool":{
"must":{
"term":{
"title":"crime"
}
},
"should":{
"range":{
"year":{
"gt":1900,
"lt":2000
}
}
}
},
"musts_not":{
"term":{
"otitle":"nothing"
}
}
}
}
把该查询放入query1.json,用户的另一个查询定义在query2.json中,内容如下:

现在把两个查询都注册到预匹配器(只是注册,还没有索引任何文档)中
curl -XPOST 'localhost:9200/notifier/.percolator/1' -d @query1.json
curl -XPOST 'localhost:9200/notifier/.percolator/old_books' -d @query2.json
命令中使用了两个完全不同的标示符来描述查询。
应用程序向预匹配器提供文档,并检查Elasticsearch是否找到相应的查询。这正是预匹配器的功能:反转搜索逻辑。不再是索引文档并执行搜索,而是存储查询并发送文档。作为结果,Elasticsearch将告诉我们哪些查询与当前文档匹配。
发送一个文档,命令如下

elasticsearch响应如下:

注意:查询使用的端点:_percolate,索引的名字对用到存储查询的索引。
深入
注册在预匹配器中的查询实际上也是文档,可以向elasticsearch发送查询选择匹配过程中使用 .percolator索引中的哪个查询。
假设图书馆有几组用户,有些用户有权借阅一些罕见的书籍,或者有几个分馆,用户可以申报他们想去哪个馆。首先更新映射:

使用下面的命令,注册这个查询

上面的例子中,用户对任何标题中含有crime词条的图书感兴趣,想从三个分馆中借阅这些书。
Elasticsearch--预匹配器的更多相关文章
- Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章
总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...
- [Google Guava]字符串处理:连接器、拆分器、字符匹配器
一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供 ...
- Junit 断言 assertThat Hamcrest匹配器
junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...
- EassyMock实践 自定义参数匹配器
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...
- 前端测试框架Jest系列教程 -- Matchers(匹配器)
写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...
- Flask入门之自定义过滤器(匹配器)
1. 动态路由的匹配器? 不知道这种叫啥名,啥用法,暂且叫做匹配器吧. Flask自带的匹配器可以说有四种吧(保守数字,就我学到的) 动态路由本身,可以传任何参数字符串或者数字,如:<user ...
- 【Jest】笔记二:Matchers匹配器
一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...
- BF匹配器
对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.它取两个可选参数,第一个是normType.它指定要使用的距离量度.默认是cv2.NORM_L2.对于SIFT,SURF很 ...
- uva11019矩阵匹配器D316
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #inclu ...
随机推荐
- CTO是有门槛的 我眼中真正优秀CTO应具备五大素质
最近几个月,不断有人找我推荐CTO人选,这两年互联网创业和创投实在是太火爆了,全民创业,创业项目井喷,一下子发现CTO不够用了,全行业缺CTO,到处都在找CTO.说实话,我自己也没有CTO存货,CTO ...
- TP-Link的Atheros芯片的WR886n v5 安装SuperWRT系统
安装SuperWRT系统 本教程以TP-Link的Atheros芯片的WR886n v5为例,教新手如何刷入一个已支持设备的固件. 下载设备固件请访问:这里 (没有支持你的设备?自由动手一下:hack ...
- Django学习系列之Python+Xadmin
项目树 引入xadmin pycharm在项目中创建存放xadmin的目录 右键项目名称-->pythonpackage-->输入名称:extra_app 拷贝xadmin代码到extra ...
- [TypeScript] Collect Related Strings in a String Enum in TypeScript
As of TypeScript 2.4, it is now possible to define string enums, or more precisely, enums with strin ...
- oracle导入命令,记录一下 数据库日志太大,清理日志文件
oracle导入命令,记录一下 工作中用到了,这个命令,记录一下,前提要安装imp.exe imp PECARD_HN/PECARD_HN@127.0.0.1:1521/orcl file=E:\wo ...
- 【图像处理】基于OpenCV底层实现的图片旋转
image processing 系列 [图像处理]直方图匹配 [图像处理]高斯滤波.中值滤波.均值滤波 图片旋转,本质上是对旋转后的图片中每一个像素点计算在原图的位置.然后照搬过来就好. (多说一句 ...
- 玩转单元測试之WireMock -- Web服务模拟器
WireMock 是一个灵活的库用于 Web 服务測试,和其它測试工具不同的是.WireMock 创建一个实际的 HTTPserver来执行你的 Web 服务以方便測试. 它支持 HTTP 响应存根. ...
- web 开发之js---js 实现地址栏的表单提交加密编码
以前在做嵌入式web时,曾经想过cgi加密,原来js可以直接实现,太好了,这里js在客户端实现编码和解码 一.在地址栏直接输入:javascript:str=encodeURI("笃行天下& ...
- 怎样将DrawerLayout显示在ActionBar/Toolbar和status bar之间
控制status bar utm_source=tuicool#toc_1" style="color:rgb(0,0,0); text-decoration:none; line ...
- 使用MyBatis Generator自动生成MyBatis的代码
这两天需要用到MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生 ...