最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearch?percolate?查詢示例詳解

 更新時(shí)間:2023年01月26日 09:32:05   作者:Elasticsearch  
這篇文章主要為大家介紹了Elasticsearch?percolate?查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Elasticsearch 通常如何工作?

我們將文檔索引到 Elasticsearch 中并對(duì)其運(yùn)行查詢以獲得滿足提供的搜索條件的文檔。 我們構(gòu)造一個(gè)匹配或術(shù)語(yǔ)查詢作為輸入,匹配查詢的文檔作為結(jié)果返回。

但這不是 percolate query 的情況.....

讓我們看看這篇文章中的 percolate 查詢,看看它有什么用處。

什么是 percolate 查詢?

它與 Elasticsearch 搜索的一般工作方式相反。 在 Percolate Query 中,你將提供文檔作為輸入,以從與輸入文檔匹配的索引中查找 query。 可以根據(jù)已保存的查詢使用 Percolate Query 對(duì)文檔進(jìn)行分類或標(biāo)記。

Percolate query 調(diào)用 Elasticsearch 經(jīng)典搜索的逆向 因?yàn)椋?/p>

  • query 將被存儲(chǔ)而不是 Elasticsearch 索引中的文檔。
  • 文檔將用于代替搜索請(qǐng)求中的 query。

Elasticsearch 將生成與輸入文檔匹配的查詢列表。
你可能想知道為什么我需要 Percolate 以及如何使用它? 因此,讓我們看看下面的一些用例。

Percolate 用例

基于 percolate query 上面的描述,我們可以把它應(yīng)用于如下的一些查詢用例:

  • 假設(shè)你正在開發(fā)一家在線商店,并提供在特定產(chǎn)品在特定價(jià)格范圍內(nèi)或以特定折扣上市時(shí)創(chuàng)建提醒的功能。
  • 你正在創(chuàng)建推文或帖子分析,并且需要只考慮符合特定條款或條件的內(nèi)容。 此外,每條滿足特定要求的推文或帖子都需要使用特定標(biāo)簽進(jìn)行標(biāo)記。

Percolate query 實(shí)施

讓我們通過(guò)一個(gè)在線商店用例來(lái)更詳細(xì)地探索 Percolate。

假設(shè)消費(fèi)者希望在 Apple iPhone 12 售價(jià) 500 美元時(shí)收到通知。

brand:apple AND price<500 AND model:'iphone 12'

使用一些示例數(shù)據(jù)創(chuàng)建 products 索引:

`
 PUT products
 {
   "mappings": {
     "properties": {
       "brand": {
         "type": "text",
         "fields": {
           "keyword": {
             "type": "keyword"
            }
          }
        },
        "model": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "long"
        }
      }
    }
  }
  PUT products/_bulk
  { "index" : { "_id": "prod101" } }
  { "brand" : "Apple", "model" : "iphone 11", "price": 800 }
  { "index" : { "_id": "prod102" } }
  { "brand" : "Samsung", "model" : "galaxy m32", "price": 700 }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

創(chuàng)建 percolate 索引:

必須將原始索引中的相同字段映射添加到 percolate 索引中。 只有需要搜索的字段必須從原始索引的映射中復(fù)制。

`
 PUT product_percolate
 {
   "mappings": {
     "properties": {
       "query": {
         "type": "percolator"
       },
       "brand": {
         "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        },
        "model": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "long"
        }
      }
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

讓我們保存一個(gè)用戶想要提醒的 query:

`
 PUT product_percolate/_doc/user1_iphone_12
 {
   "query": {
     "bool": {
       "must": [
         {
           "term": {
             "brand.keyword": {
               "value": "Apple"
              }
            }
          },
          {
            "term": {
              "model.keyword": {
                "value": "iphone 12"
              }
            }
          },
          {
            "range": {
              "price": {
                "lte": 500
              }
            }
          }
        ]
      }
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

現(xiàn)在進(jìn)行產(chǎn)品查詢時(shí),將不會(huì)返回任何結(jié)果,因?yàn)樗?nbsp;iPhone 12 不低于 500 美元。

`
 POST products/_search
 {
   "query": {
     "bool": {
       "must": [
         {
           "term": {
             "brand.keyword": {
               "value": "Apple"
              }
            }
          },
          {
            "term": {
              "model.keyword": {
                "value": "iphone 12"
              }
            }
          },
          {
            "range": {
              "price": {
                "lte": 500
              }
            }
          }
        ]
      }
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

上面的搜索將返回如下的結(jié)果:

`
 {
   "took": 1,
   "timed_out": false,
   "_shards": {
     "total": 1,
     "successful": 1,
     "skipped": 0,
     "failed": 0
   },
    "hits": {
      "total": {
        "value": 0,
        "relation": "eq"
      },
      "max_score": null,
      "hits": []
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

上面的結(jié)果表明,沒(méi)有一個(gè)產(chǎn)品滿足我們的搜索條件。

讓我們添加價(jià)格為 499 的新產(chǎn)品 iPhone 12:

  POST product/_doc/prod104
  {
    "brand": "Apple",
    "model": "iphone 12",
    "price": 499
  }

不會(huì)發(fā)送自動(dòng)通知,因?yàn)樵谒饕臋n時(shí)不會(huì)運(yùn)行 percolate 查詢。 percolate 查詢必須手動(dòng)運(yùn)行。

Percolate query API

你可以通過(guò)兩種方式執(zhí)行 percolate query:

首先,你可以使用單個(gè)文檔或多個(gè)文檔作為輸入運(yùn)行 percolate,如下所示:

單個(gè)文檔

 GET product_percolate/_search
 {
   "query": {
     "percolate": {
       "field": "query",
       "document": {
         "brand": "Apple",
         "model": "iphone 12",
         "price": 499
        }
      }
    }
  }

多個(gè)文檔

`
 GET product_percolate/_search
 {
   "query": {
     "percolate": {
       "field": "query",
       "documents": [
         {
           "brand": "Apple",
           "model": "iphone 12 pro",
            "price": 600
          },
          {
            "brand": "Apple",
            "model": "iphone 12",
            "price": 499
          }
        ]
      }
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

你將收到類似于正常查詢響應(yīng)的響應(yīng),字段 _source 將顯示匹配的查詢,但字段 _percolator_document_slot 將顯示在這種情況下多個(gè)文檔中匹配的文檔的位置。

`
 {
   "took": 3,
   "timed_out": false,
   "_shards": {
     "total": 1,
     "successful": 1,
     "skipped": 0,
     "failed": 0
   },
    "hits": {
      "total": {
        "value": 1,
        "relation": "eq"
      },
      "max_score": 1.2615292,
      "hits": [
        {
          "_index": "product_percolate",
          "_id": "user1_iphone_12",
          "_score": 1.2615292,
          "_source": {
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "brand.keyword": {
                        "value": "Apple"
                      }
                    }
                  },
                  {
                    "term": {
                      "model.keyword": {
                        "value": "iphone 12"
                      }
                    }
                  },
                  {
                    "range": {
                      "price": {
                        "lte": 500
                      }
                    }
                  }
                ]
              }
            }
          },
          "fields": {
            "_percolator_document_slot": [
              0
            ]
          }
        }
      ]
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

其次,你可以提供現(xiàn)有索引中的文檔 ID,如下所示(目前不支持傳遞多個(gè) ID):

  GET product_percolate/_search
  {
    "query": {
      "percolate": {
        "field": "query",
        "index": "product",
        "id": "prod104"
      }
    }
  }

上面的查詢的結(jié)果為:

`
 {
   "took": 7,
   "timed_out": false,
   "_shards": {
     "total": 1,
     "successful": 1,
     "skipped": 0,
     "failed": 0
   },
    "hits": {
      "total": {
        "value": 1,
        "relation": "eq"
      },
      "max_score": 1.2615292,
      "hits": [
        {
          "_index": "product_percolate",
          "_id": "user1_iphone_12",
          "_score": 1.2615292,
          "_source": {
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "brand.keyword": {
                        "value": "Apple"
                      }
                    }
                  },
                  {
                    "term": {
                      "model.keyword": {
                        "value": "iphone 12"
                      }
                    }
                  },
                  {
                    "range": {
                      "price": {
                        "lte": 500
                      }
                    }
                  }
                ]
              }
            }
          },
          "fields": {
            "_percolator_document_slot": [
              0
            ]
          }
        }
      ]
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

如何將 Percolate 與你的應(yīng)用程序集成

  • 如果你使用 Logstash 為數(shù)據(jù)編制索引,則可以使用 Elasticsearch 過(guò)濾器插件并運(yùn)行過(guò)濾查詢以查看傳入文檔是否與任何已保存的查詢匹配。 如果是這樣,你可以使用單獨(dú)的輸出插件向用戶發(fā)送通知。
  • 如果自定義連接器用于數(shù)據(jù)索引,則 Elastic 客戶端可用于運(yùn)行 percolate query 并直接從連接器發(fā)送通知。

為什么要 percolate 而不是 watcher?

相對(duì)于percolate,watcher 不太適合需要實(shí)時(shí)匹配的場(chǎng)景。 是的,相比之下還有更多的爭(zhēng)論空間,但暫時(shí),我認(rèn)為這不在本博客的范圍之內(nèi)。

以上就是Elasticsearch percolate 查詢示例詳解的詳細(xì)內(nèi)容,我希望本文能讓你非常簡(jiǎn)單地掌握 percolate 查詢,更多關(guān)于Elasticsearch percolate查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中stream.map和stream.forEach的區(qū)別

    Java中stream.map和stream.forEach的區(qū)別

    本文主要介紹了Java中stream.map和stream.forEach的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringBoot?Http遠(yuǎn)程調(diào)用的方法

    SpringBoot?Http遠(yuǎn)程調(diào)用的方法

    這篇文章主要為大家詳細(xì)介紹了SpringBoot?Http遠(yuǎn)程調(diào)用的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • MyBatis中$和#的深入講解

    MyBatis中$和#的深入講解

    這篇文章主要給大家介紹了關(guān)于MyBatis中$和#的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java雇員管理小項(xiàng)目

    Java雇員管理小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了Java雇員管理小項(xiàng)目,理解面向?qū)ο缶幊?,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java編程是做什么的

    java編程是做什么的

    在本篇文章里小編給大家整理的是一篇關(guān)于java編程是什么相關(guān)的基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以閱讀下。
    2021-01-01
  • Java并發(fā)之CAS原理詳解

    Java并發(fā)之CAS原理詳解

    這篇文章主要為大家詳細(xì)介紹了Java的CAS原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Spark JDBC操作MySQL方式詳細(xì)講解

    Spark JDBC操作MySQL方式詳細(xì)講解

    這篇文章主要介紹了Spark JDBC操作MySQL方式,Spark SQL可以通過(guò)JDBC從傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中讀寫數(shù)據(jù),讀取數(shù)據(jù)后直接生成的是DataFrame,然后再加上借助于Spark SQL豐富的API來(lái)進(jìn)行各種操作
    2023-02-02
  • springboot創(chuàng)建線程池的兩種方式小結(jié)

    springboot創(chuàng)建線程池的兩種方式小結(jié)

    這篇文章主要介紹了springboot創(chuàng)建線程池的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot Mybatis動(dòng)態(tài)數(shù)據(jù)源切換方案實(shí)現(xiàn)過(guò)程

    SpringBoot Mybatis動(dòng)態(tài)數(shù)據(jù)源切換方案實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了SpringBoot+Mybatis實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換方案過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java類初始化順序詳解

    Java類初始化順序詳解

    這篇文章主要介紹了Java類初始化順序詳解,java語(yǔ)言在使用過(guò)程中最先開始就是初始化,在工作中如果遇到什么問(wèn)題需?要定位往往到最后也可能是初始化的問(wèn)題,因此掌握初始化的順序很重要,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

乐山市| 建湖县| 五家渠市| 三门峡市| 隆林| 东安县| 抚远县| 葵青区| 溧阳市| 肥城市| 海晏县| 涟水县| 义马市| 仙桃市| 宝兴县| 延安市| 西青区| 任丘市| 温州市| 南溪县| 福泉市| 镇远县| 南丹县| 桑植县| 祁东县| 山东省| 获嘉县| 宿州市| 大同县| 临漳县| 错那县| 江永县| 尚志市| 秦皇岛市| 阳城县| 阜平县| 察雅县| 自治县| 岳阳市| 滦平县| 台江县|