前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你用过Elasticsearch Percolate 反向检索吗?

你用过Elasticsearch Percolate 反向检索吗?

作者头像
铭毅天下
发布2020-03-03 15:29:39
2.2K0
发布2020-03-03 15:29:39
举报
文章被收录于专栏:铭毅天下

题记

percolator query 大家肯定在文档中见过,但实际业务中则较少用到。

本文探究一下percolator query的使用方法、原理、适用场景。

1、什么是percolator查询

percolator中文含义:渗透器。

percolator query等价于渗透查询或者反向查询

我们相信大多数Elasticsearch开发人员都会按照惯例进行思考,我们为数据建模并将其存储在索引中。然后,他们通过搜索API定义查询以检索这些文档。

percolator query 的原理则完全相反,如下图所示:

您将查询存储到索引中,然后通过Percolate API定义文档以检索这些查询。

也就是:

  • 传统查询,根据查询语句的查询条件返回文档。query->document。
  • 而percolator渗透查询,根据文档返回与之匹配的查询语句。document->query。

2、percolator 查询的应用场景

举例:提供一个存储用户兴趣的平台,以便在每次有新内容进入时将正确的内容(通知警报)发送给正确的用户。

举例:用户订阅了特定主题,以便一旦该主题的新文章出现,就会向感兴趣的用户发送通知。

应用场景如下:

  • 价格监控
  • 新闻警报
  • 股票警告
  • 日志监控
  • 天气预报
  • 库存警报
  • ......

3、实战一把

3.1 实际业务需求

阈值告警业务场景——当指定字段count值大于阈值时候,报警提示。

3.2 percolator mapping定义

代码语言:javascript
复制
DELETE my-index
PUT /my-index
{
  "mappings": {
    "properties": {
      "threshold": {
        "type": "long"
      },
      "count": {
        "type": "long"
      },
      "query": {
        "type": "percolator"
      }
    }
  }
}

注意:percolator是等价于:keyword、long、Integer的数据类型。

代码语言:javascript
复制
 "query": {
        "type": "percolator"
      }

这种定义结构是不可以修改的。

3.3 插入文档

代码语言:javascript
复制
PUT /my-index/_doc/1
{
  "threshold": 100,
  "query": {
    "bool": {
      "must": {
        "range": {
          "count":{
            "gt":100
          }
        }
      }
    }
  }
}

3.4 查询实现

代码语言:javascript
复制
GET /my-index/_search
{
  "query": {
    "percolate": {
      "field": "query",
      "documents": [
        {
          "count": 1
        },
        {
          "count": 50
        },
        {
          "count": 120
        },
        {
          "count": 150
        }
      ]
    }
  }
}

返回结果(部分):

代码语言:javascript
复制
{
  "took" : 4,
.......省略.....
        },
        "fields" : {
          "_percolator_document_slot" : [
            2,
            3
          ]
        }
      }
    ]
  }
}

其中:"_percolator_document_slot” 指代的是:文档position,从0开始计数。

4、percolator 查询如何实现?

第一:通过使用DSL将用户的待设置的预警条件构造成Elasticsearch query语句,就好像它是一个文档一样,导入Elasticsearch索引。

第二:每次发布新文章时,都无需对其编入索引(索引化),就可以对其进行过滤,以了解文档值是否达到阈值。

第三:根据返回结果_percolator_document_slot,决定是否预警及精确值预警。

参考:

[1] https://www.agiratech.com/elasticsearch-percolator-query-implementation-in-ruby/

[2] https://qvault.io/2019/11/14/how-percolate-queries-in-elasticsearch-make-alerting-a-breeze/

[3] https://stackoverflow.com/questions/21536599/what-does-percolator-mean-do-in-elasticsearch

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题记
  • 1、什么是percolator查询
  • 2、percolator 查询的应用场景
  • 3、实战一把
    • 3.1 实际业务需求
      • 3.2 percolator mapping定义
        • 3.3 插入文档
          • 3.4 查询实现
          • 4、percolator 查询如何实现?
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档