成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[441150]]

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

這些確實是 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

顯示 successfully 表示啟動成功,再通過執行命令curl 'http://localhost:9200/?pretty' 可以看到如下輸出,表示 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.    } 

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

索引文檔

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

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

這里我們通過像 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.   "name""ziyou"
  3.   "age":  "20"
  4.   "date":  "2021/12/19" 

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

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

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

刪除文檔

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

 

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

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2010-03-22 09:32:42

自學編程

2020-02-26 14:50:41

React搜索前端

2018-03-22 15:36:26

程序員RubyiOS

2016-11-01 07:32:35

Java

2016-01-31 09:47:13

Java程序員構建工具

2013-08-20 09:33:59

程序員

2020-12-21 08:24:21

程序員設備加班

2012-11-08 09:49:30

C++Java程序員

2023-07-16 23:09:55

GitType代碼

2020-03-02 15:15:37

程序員工資協議

2014-12-01 10:05:25

程序員

2014-07-14 11:28:41

2014-07-29 10:30:16

JavaJava程序員

2013-03-06 09:50:02

程序員搜索

2016-01-18 11:03:58

程序員搜索技巧

2022-12-07 10:21:19

谷歌搜索技巧

2012-11-02 13:47:31

Java程序員編程

2011-05-13 14:34:02

程序員

2014-02-21 10:20:40

2020-02-25 22:41:41

程序員技能開發者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久久 | 国产精品久久久久久久免费大片 | 国产精品久久免费观看 | 国产一区二区三区视频在线观看 | 久久国产精品99久久久久久丝袜 | 国产成人自拍一区 | 国产精品大片 | 国产精品久久久久久福利一牛影视 | 超碰97在线免费 | 精品久久久久久亚洲精品 | 亚洲一区综合 | 欧美亚洲国产一区二区三区 | 九九久久精品视频 | 99精品欧美一区二区蜜桃免费 | 日日想夜夜操 | 日韩国产在线观看 | 在线免费观看a级片 | 久久久久免费精品国产 | 精品日韩一区二区 | 日韩欧美中文 | 成人欧美一区二区三区在线播放 | 欧美日韩视频在线第一区 | a级免费观看视频 | 成人免费视频 | 国产精品久久久久久妇女6080 | 影音av | 国产欧美精品在线 | 色橹橹欧美在线观看视频高清 | 日本精品在线播放 | 久久国产精品一区二区三区 | www.天天操 | 最新中文字幕 | 可以免费看的毛片 | 81精品国产乱码久久久久久 | 久久99深爱久久99精品 | 亚洲一二三区在线观看 | 99pao成人国产永久免费视频 | www亚洲精品 | 欧美精品区 | 91精品国产一区二区在线观看 | 日韩一级精品视频在线观看 |