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 ...
随机推荐
- Array.prototype.map()方法详解
Array.prototype.map() 1 语法 const new_array = arr.map(callback[, thisArg]) 2 简单栗子 let arr = [1, 5, 10 ...
- 004 ospf
r0(config)#router ospf 1 OSPF process 1 cannot start. There must be at least one "up" IP i ...
- Angular CLI: 1.6.7 入门
当你使用npm或者yarn也安装不了angular-cli时,请使用淘宝镜像. Step1 npm i -g cnpm --registry=https://registry.npm.taobao.o ...
- 【CERC2008】【BZOJ4319】Suffix reconstruction
Description 话说练习后缀数组时,小C 刷遍 poj 后缀数组题. 各类字符串题闻之丧胆.就在准备对敌方武将发出连环杀时,对方一记无中生有,又一招顺 手牵羊.小C 程序中的原字符数组就被牵走 ...
- __init__、__str__、__del__方法
1.def__init__()方法: class Cat: """定义了一个Cat类""" #初始化对象 def __init__(self ...
- 约瑟夫环问题(Josephus)
约瑟夫环:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至最后一个元素并输出该元素的值. 一.循环链表:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数值为M,则 ...
- 解决Hibernate4执行update操作,不更新数据的问题
后台封装java对象,使用hibernate4再带的update,执行不更新数据,不报错. 下面贴出解决方法: 失败的方法 hibernate自带update代码:(失效) Session sessi ...
- HNOI模拟 Day3.23
一.拓扑(top)[ 题目描述]:给你一个有向二分图,求他的拓扑序列的个数.[ 输入]:第一行两个数 N,M,表示点数和边数.接下来 M 行每行两个数 a,b,表示 a 向 b 有一条有向边.[ 输出 ...
- srcset
<div id="pg-334-2" class="panel-grid panel-has-style"> <div style=" ...
- H264--3--NAL层的处理[6]
------------------------------H.264的NAL层处理 ------------------------------ H264以NALU(NAL unit)为单位来支持编 ...