你用過Elasticsearch Percolate 反向檢索嗎?

題記

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定義

DELETE my-index
PUT /my-index
{
  "mappings": {
    "properties": {
      "threshold": {
        "type": "long"
      },
      "count": {
        "type": "long"
      },
      "query": {
        "type": "percolator"
      }
    }
  }
}

注意:percolator是等價於:keyword、long、Integer的數據類型。

 "query": {
        "type": "percolator"
      }

這種定義結構是不可以修改的。

3.3 插入文檔

PUT /my-index/_doc/1
{
  "threshold": 100,
  "query": {
    "bool": {
      "must": {
        "range": {
          "count":{
            "gt":100
          }
        }
      }
    }
  }
}

3.4 查詢實現

GET /my-index/_search
{
  "query": {
    "percolate": {
      "field": "query",
      "documents": [
        {
          "count": 1
        },
        {
          "count": 50
        },
        {
          "count": 120
        },
        {
          "count": 150
        }
      ]
    }
  }
}

返回結果(部分):

{
  "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


推薦閱讀:

重磅 | 死磕Elasticsearch方法論認知清單(2019國慶更新版)乾貨 | 95後運維小哥20天+通過Elastic認證考試經驗分享

“金三銀四“,敢不敢“試”?

潛心一技、做到極致!——Elastic認證工程師之路



更短時間更快習得更多幹貨!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章