一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

2021-12-21 22:26Java極客技術鴨血粉絲Tang Java教程

Elasticsearch 是一個實時的分布式搜索分析引擎,它的搜索速度和規模,堪稱前所未有。我們只需要把數據按照規定的索引格式去存儲,后續就可以進行極致的搜索,因此 Elasticsearch 被廣泛的應用于各大互聯網公司。

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

搜索引擎在任何人的日常生活和工作中都承擔著很重要的角色,說到搜索大家想到的最多可能就是百度,谷歌,必應等搜索引擎。

這些確實是 PC 互聯網時代的搜索先鋒,但是現在移動互聯網時代搜索已經很普及了,各大應用基本上都支持搜索,像抖音,微信,知乎等等應用程序,都會內置搜索引擎來實現自家內容的搜索。

Elasticsearch 是一個實時的分布式搜索分析引擎,它的搜索速度和規模,堪稱前所未有。我們只需要把數據按照規定的索引格式去存儲,后續就可以進行極致的搜索,因此 Elasticsearch 被廣泛的應用于各大互聯網公司。

根據 Elasticsearch 的官方介紹,Wikipedia,Github,Stack Overflow 等大廠都在使用。

Wikipedia 使用 Elasticsearch 提供帶有高亮片段的全文搜索,還有 search-as-you-type 和 did-you-mean 的建議。

衛報使用 Elasticsearch 將網絡社交數據結合到訪客日志中,為它的編輯們提供公眾對于新文章的實時反饋。

Stack Overflow 將地理位置查詢融入全文檢索中去,并且使用 more-like-this 接口去查找相關的問題和回答。

GitHub 使用 Elasticsearch 對1300億行代碼進行查詢。

安裝使用

Elasticsearch 提供了開箱即用的功能,我們通過在官網 https://www.elastic.co/downloads/elasticsearch 下載最新的符合自己電腦系統的穩定版本,然后解壓后執行./bin/elasticsearch

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

顯示 successfully 表示啟動成功,再通過執行命令curl 'http://localhost:9200/?pretty' 可以看到如下輸出,表示 Elasticsearch 本地啟動成功。

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

在使用 Elasticsearch 之前,我們先簡單介紹一個 Elasticsearch 的存儲結構,便于我們后面進行學習。

首先我們要知道一個事情那就是 Elasticsearch 是面向文檔的,所謂文檔就是一個 document,如果用過 MongoDB的話,小伙伴對文檔應該比較熟悉,是一個 NoSQL 的形式,可以理解為一個JSON 形式的結構,跟我們常用的 MySQL 關系型的結構不一樣,目前基本上任何一門語言的對象都可以直接轉化成 JSON 形式,這極大方便了我們的使用。

文檔的形式

文檔的組成由文檔數據和元數據組成,其中元數據包括_index,_type,_id 三個特別重要的元數據,其中 _index 表示文檔在哪存放,_type 表示文檔的對象類別,_id文檔唯一標識。

雖然 Elasticsearch 是以文檔形式存儲的,但這里我們可以用關系型數據庫作類比,比如這里的_index 可以類似于 MySQL 的 database,_type 類似有 MySQL 的 table,其中_id 類似于 ID 字段。

與 Elasticsearch 進行交互

通過官方文檔我們可以知道一個 Elasticsearch 請求和任何 HTTP 請求一樣由若干相同的部件組成:curl -X ' ://: / ?' -d ''

被 < > 標記的部分表示含義如下:

標記 含義
VERB 適當的 HTTP 方法 謂詞 : GET POST PUT HEAD 或者DELETE
PROTOCOL http 或者 https(如果你在 Elasticsearch 前面有一個 https 代理)
HOST Elasticsearch 集群中任意節點的主機名,或者用 localhost 代表本地機器上的節點。
PORT 運行 Elasticsearch HTTP 服務的端口號,默認是 9200
PATH API 的終端路徑(例如 _count 將返回集群中文檔數量)。Path 可能包含多個組件,例如:_cluster/stats _nodes/stats/jvm
QUERY_STRING 任意可選的查詢字符串參數 (例如 ?pretty 將格式化地輸出 JSON 返回值,使其更容易閱讀)
BODY 一個 JSON 格式的請求體 (如果請求需要的話)

示例

查看 Elasticsearch 集群中文檔的個數:

  1. curl -XGET 'http://localhost:9200/_count?pretty' -H 'Content-Type:application/json' -d '
  2.  
  3. "query": {
  4. "match_all": {}
  5. }
  6. '

返回如下,其中 count 為 0,表示我們集群中暫時還沒有文檔:

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

索引文檔

通過我們上面提到的內容,這里我們嘗試進行一個文檔的索引,語句如下,然后再查詢一下文檔的數據,結果如下

  1. curl -XPUT 'http://localhost:9200/student/class1/1?pretty' -H 'Content-Type:application/json' -d '
  2. {
  3. "name": "ziyou",
  4. "age": "18",
  5. "date": "2021/12/19"
  6. }
  7. '

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

這里我們通過像 student 索引 class1 的 type 下面索引了一篇 id 為 1 的學生,通過 pretty 參數將返回美化查看,通過上面的操作,現在我們的 Elasticsearch 集群里面已經存在了一個 id 為 1 的學生了。

查詢文檔

索引文檔過后,我們再根據下面的語句進行文檔的獲取

  1. curl -XGET 'http://localhost:9200/student/class1/1?pretty'

更新文檔

我們可以通過前面 PUT 語句再次執行,進行文檔的更新,如下所示

  1. curl -XPUT 'http://localhost:9200/student/class1/1?pretty' -H 'Content-Type:application/json' -d '
  2. {
  3. "name": "ziyou",
  4. "age": "20",
  5. "date": "2021/12/19"
  6. }

Java程序員如何通過 ElasticSearch 構建極致的搜索體驗?

說明:可以看到 age 這個字段已經變更了,但是這里我們還看到多了一個 version 字段,正常這里應該是 2 ,阿粉只是多操作了幾次所以這里是 7。

需要說明的是,更新文檔并不是更新原來的文檔,Elasticsearch 底層幫我們把原來的文檔標記成刪除狀態,然后創建了一個新的文檔,再加上了一個版本號,因為文檔 ID 是沒有變化的。

當隨著我們索引數據的越來越多,Elasticsearch 底層會幫我們清理這些刪除的文檔數據,從我們的視角來看,就是文檔已經更新了。

刪除文檔

  1. curl -XDELETE 'http://localhost:9200/student/class1/1

通過 DELETE 指令,我們可以將文檔進行刪除,刪除也同更新一樣,只是標記為刪除狀態,并不會立馬從磁盤中刪除,隨著不斷的索引更多的數據,Elasticsearch 將會在后臺清理標記為已刪除的文檔。同時進行刪除的時候,version 版本也會進行增加。

原文鏈接:https://mp.weixin.qq.com/s/uLRuiX0LYnb8iXEK0pkNWg

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 日本xxxx69hd | 二区三区视频 | 夫妇交换小说 | 暖暖暖免费观看在线观看 | 久久精品视在线观看2 | 青青成人福利国产在线视频 | 亚洲国产在线99视频 | 色综合久久九月婷婷色综合 | 色视频久久 | 亚洲精品乱码久久久久久蜜桃图片 | 插得好爽 | 果冻传媒在线免费观看 | 欧美操大逼视频 | 小SAO货边洗澡边CAO你动漫 | 国内精品久久久久久久久久久久 | 性欧美hd | 欧美久久久久久 | 亚洲欧美一区二区三区不卡 | free chinese麻豆 | 啾咪成人漫画免费 | 麻豆网站在线免费观看 | 美女黄金大片视频免费看 | 亚洲精品一区二区三区中文字幕 | 亚洲黄色大片 | 天天色天天综合 | www.日本在线播放 | 湖南美女被黑人4p到惨叫 | 99热久久这里只有精品6国产网 | 国产成人一区二区三区影院免费 | 男男同志gaysxxx | 69堂最新地域网名 | 国内久久久 | 极品丝袜乱系列在线阅读 | 国产成人精品午夜免费 | 无人区在线观看免费完整版免费 | 国产成人免费高清激情视频 | 国产香蕉一区二区精品视频 | 国产灌醉 | 97久久精品午夜一区二区 | 青青草原在线免费 | 天堂一区二区在线观看 |