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词条的图书感兴趣,想从三个分馆中借阅这些书。