ElasticSearch全文檢索__ElasticSearch Java API

      網友投稿 904 2025-03-31

      elasticsearch-Java Client類型

      Node Client

      1) 客戶端節點本身也是elasticsearch節點

      2)也進入集群,和其他ElasticSearch節點一樣

      ElasticSearch全文檢索__ElasticSearch Java API

      3)升級維護麻煩(詞庫、配置等等)

      https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.2/index.html

      TransportClient

      1)更加輕量級

      2)客戶端socket連接到es集群

      3)早期版本需要完全一致

      ElasticSearch-TransportClient環境準備

      Eclipse 開發工具

      添加Maven 依賴

      org.elasticsearch

      elasticsearch

      2.4.0

      ElasticSearch-TransportClient連接

      TransportClient 測試連接ES集群

      client.transport.sniff嗅探功能

      TransportClient 生成環境連接ES集群

      ElasticSearch-Document APIs

      Index API

      Get API

      Delete API

      Delete By Query API

      Update API

      Multi Get API

      Bulk API

      Using Bulk Processor

      ElasticSearch-搜索-原理

      ElasticSearch-搜索-問題

      返回數據數量問題

      如果數據分散在默認的5個分片上,ES會向5個分片同時發出請求,每個分片都返回10條數據,最終會返回總數據為:5*10=50條數據,遠遠大于用戶請求

      返回數據排名問題

      每個分片計算符合條件的前10條數據都是基于自己分片的數據進行打分計算的。計算分值(score)使用的詞頻和文檔頻率等信息都是基于自己分片的數據進行的,而ES進行整體排名是基于每個分片計算后的分值進行排序的(打分依據就不一致,最終對這些數據統一排名的時候就不準確了)

      ElasticSearch-搜索-問題解決思路

      返回數據數量問題:

      第一步:先從每個分片匯總查詢的數據id,進行排名,取前10條數據

      第二步:根據這10條數據id,到不同分片獲取數據

      返回數據排名問題:

      將各個分片打分標準統一;

      ElasticSearch-搜索-SearchType-類型一

      query and fetch

      向索引的所有分片(shard)都發出查詢請求,各分片返回的時候把元素文檔(document)和計算后的排名信息一起返回。

      優點:

      這種搜索方式是最快的。因為相比后面的幾種搜索方式,這種查詢方法只需要去shard查詢一次。

      缺點:

      各個shard返回的結果的數量之和可能是用戶要求的size的n倍。

      https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-request-search-type.html

      ElasticSearch-搜索-SearchType-類型二

      query then fetch(es默認的搜索方式)

      實現原理:

      第一步,先向所有的shard發出請求,各分片只返回文檔id(注意,不包括文檔document)和排名相關的信息(也就是文檔對應的分值),然后按照各分片返回的文檔的分數進行重新排序和排名,取前size個文檔。

      第二步,根據文檔id去相關的shard取document。這種方式返回的document數量與用戶要求的大小是相等的。

      優點:

      返回的數據量是準確的。

      缺點:

      數據排名不準確且性能一般。

      ElasticSearch-搜索-SearchType-類型三

      DFS query and fetch

      這種方式比第一種類型多了一個DFS步驟,它可以更精確控制搜索打分和排名。

      實現原理:

      第一步:先對所有分片發送請求,把所有分片中的詞頻和文檔頻率等打分依據全部匯總到一塊。

      第二步:然后再執行后面的操作后續操作

      優點:

      數據排名準確。

      缺點:

      搜索性能一般,且返回的數據量不準確,可能返回(N*分片數量)的數據。

      ElasticSearch-搜索-SearchType-類型四

      DFS query then fetch

      比第2種方式多了一個DFS步驟。

      實現原理:

      第一步:先對所有分片發送請求,把所有分片中的詞頻和文檔頻率等打分依據全部匯總到一塊。

      第二步:然后再執行后面的操作后續操作

      優點:

      返回的數據量是準確的,數據排名也是準確的。

      缺點:

      性能最差【這個最差只是表示在這四種查詢方式中性能最慢,也不至于不能忍受,如果對查詢性能要求不是非常高,而對查詢準確度要求比較高的時候可以考慮這個】

      ElasticSearch-搜索-SearchType-總結

      從性能考慮來說,QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。

      從搜索的準確度來說,DFS要比非DFS的準確度更高。

      ElasticSearch-搜索-SearchType-示例操作:

      ElasticSearch-查詢-query

      查詢:query

      分頁:from/size

      排序:sort

      過濾:filter

      按查詢匹配度排序

      高亮顯示:highlight(后面結合實例講解)

      ElasticSearch-aggregations

      統計:aggregations

      根據字段進行分組統計

      根據字段分組,統計其他字段的值

      size設置為0,會獲取所有數據,否則,默認只會返回前10個分組的數據

      ElasticSearch-aggregations-實例一:

      統計相同年齡學員個數

      ElasticSearch-aggregations-實例二:

      ElasticSearch-分頁

      SQL 語句分頁:limit m,n:

      m:從哪條結果開始

      n:size:每次返回多少個結果

      Elasticsearch使用的是from以及size兩個參數:

      from:從哪條結果開始,默認值為0

      size:每次返回多少個結果,默認值為10

      假設每頁顯示5條結果,那么1至3頁的請求就是:

      GET /_search?size=5

      GET /_search?size=5&from=5

      GET /_search?size=5&from=10

      注意

      不要一次請求過多或者頁碼過大的結果,這么會對服務器造成很大的壓力。因為它們會在返回前排序。一個請求會經過多個分片。每個分片都會生成自己的排序結果。然后再進行集中整理,以確保最終結果的正確性。

      ElasticSearch-分頁-實例

      ElasticSearch-支持多索引和多類型查詢

      ElasticSearch-分片查詢方式

      randomizeacross shards:隨機選擇分片查詢數據,es的默認方式

      _local:優先在本地節點有的分片中查詢,沒有的話再在其它節點查詢。

      _only_local:只在本地節點有的分片中查詢。

      _primary:只在主分片中查詢。

      _replica:只在副本中查詢。

      _primary_first:優先在主分片中查詢,然后在副本中查詢。

      _replica_first:優先在副本中查詢,然后在主分片中查詢。

      _only_node:只在指定id的節點里面進行查詢。

      _prefer_node:優先在指定的節點上執行查詢。

      _shards:查詢指定分片的數據

      ElasticSearch-極速查詢

      Es將數據存儲在不同的分片中,根據文檔id通過內部算法得出要將文檔存儲在哪個分片上,所以在查詢時只要指定在對應的分片上進行查詢就可以實現基于es的極速查詢。

      知道數據在那個分片上,是解決問題的關鍵。

      實現方式:我們可以通過路由參數來設置數據存儲在同一個分片中,setRouting("") org.elasticsearch.cluster.routing

      Java API Elasticsearch

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎么用excel甘特圖(甘特圖excel怎么做)
      下一篇:Docker容器+Phoronix-Test-Suite測試X86和ARM的ffmpeg轉碼性能
      相關文章
      国产亚洲精品成人AA片新蒲金| 亚洲黄色网址在线观看| 亚洲成人黄色在线| 亚洲国产另类久久久精品黑人| 亚洲精品美女久久久久久久| 亚洲一区二区三区深夜天堂| 亚洲精品午夜在线观看| 久久精品国产亚洲夜色AV网站| 亚洲成AV人在线观看天堂无码| 亚洲人成网7777777国产| 国产精品亚洲二区在线| 色欲aⅴ亚洲情无码AV| 国产精品亚洲精品日韩动图| 无码色偷偷亚洲国内自拍| 五月婷婷亚洲综合| 老司机亚洲精品影院在线观看 | 亚洲AV成人无码久久精品老人| 亚洲福利在线播放| 亚洲色偷拍区另类无码专区| 中文字幕亚洲日韩无线码| 亚洲午夜国产精品无码| 国产亚洲精品岁国产微拍精品| 亚洲国产精品成人精品无码区在线| 亚洲熟妇av一区二区三区漫画| 日本亚洲成高清一区二区三区| 亚洲精品成人片在线播放| 午夜亚洲国产理论秋霞| 亚洲视频一区二区在线观看| 亚洲国产片在线观看| 伊人久久亚洲综合影院首页| 亚洲成在人线在线播放无码| 亚洲av永久无码精品秋霞电影秋 | 亚洲国产成人手机在线观看| 狠狠入ady亚洲精品| 亚洲日韩国产精品乱| 国产成人A人亚洲精品无码| 亚洲福利视频导航| 亚洲午夜电影在线观看| 亚洲狠狠婷婷综合久久| 亚洲精品成人片在线观看| 亚洲乳大丰满中文字幕|