ElasticSearch筆記
elasticsearch(簡稱ES)
Elasticsearch是用Java開發并且是當前最流行的開源的企業級搜索引擎。 能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。 客戶端支持Java、.NET(C#)、PHP、Python、Ruby等多種語言。
官方網站:https://www.elastic.co/
-:https://www.elastic.co/cn/start
ElasticSearch與Lucene的關系
Lucene可以被認為是迄今為止最先進、性能最好的、功能最全的搜索引擎庫(框 架) 但是想要使用Lucene,必須使用Java來作為開發語言并將其直接集成到你的應用 中,并且Lucene的配置及使用非常復雜,你需要深入了解檢索的相關知識來理解 它是如何工作的。
Lucene缺點:
只能在Java項目中使用,并且要以jar包的方式直接集成項目中。
使用非常復雜-創建索引和搜索索引代碼繁雜。
不支持集群環境-索引數據不同步(不支持大型項目)。
索引數據如果太多就不行,索引庫和應用所在同一個服務器,共同占用 硬盤.共用空間少。
上述Lucene框架中的缺點,ES全部都能解決。
ES vs Solr比較
當單純的對已有數據進行搜索時,Solr更快。
當實時建立索引時, Solr會產生io阻塞,查詢性能較差, Elasticsearch具有明 顯的優勢。
大型互聯網公司,實際生產環境測試,將搜索引擎從Solr轉到 Elasticsearch以 后的平均查詢速度有了50倍的提升。
總結:
二者安裝都很簡單。
Solr 利用 Zookeeper 進行分布式管理,而Elasticsearch 自身帶有分布式 協調管理功能。
Solr 支持更多格式的數據,比如JSON、XML、CSV,而 Elasticsearch 僅支 持json文件格式。
Solr 在傳統的搜索應用中表現好于 Elasticsearch,但在處理實時搜索應用 時效率明顯低于Elasticsearch。
Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch更適用于新興的實 時搜索應用。
Lucene全文檢索框架
什么是全文檢索
全文檢索是指:
通過一個程序掃描文本中的每一個單詞,針對單詞建立索引,并保存 該單詞在文本中的位置、以及出現的次數.
用戶查詢時,通過之前建立好的索引來查詢,將索引中單詞對應的文 本位置、出現的次數返回給用戶,因為有了具體文本的位置,所以就可以 將具體內容讀取出來了
分詞原理之倒排索引
指定IK分詞器作為默認分詞器
ES的默認分詞設置是standard,這個在中文分詞時就比較尷尬了,會單字拆分,比如我搜 索關鍵詞“清華大學”,這時候會按“清”,“華”,“大”,“學”去分詞,然后搜出來 的都是些“清清的河水”,“中華兒女”,“地大物博”,“學而不思則罔”之類的莫名其 妙的結果,這里我們就想把這個分詞方式修改一下,于是呢,就想到了ik分詞器,有兩種 ik_smart和ik_max_word。 ik_smart會將“清華大學”整個分為一個詞,而ik_max_word會將“清華大學”分為“清 華大學”,“清華”和“大學”,按需選其中之一就可以了。 修改默認分詞方法(這里修改school_index索引的默認分詞為:ik_max_word):
測試分詞效果:
ES數據管理
ES數據管理概述
ES是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔 (document)。
然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。 在ES中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。 ES使用JSON作為文檔序列化格式。 JSON現在已經被大多語言所支持,而且已經成為NoSQL領域的標準格式。
ES存儲的一個員工文檔的格式示例:
基本操作
格式: PUT /索引名稱
舉例: PUT /es_db
格式: GET /索引名稱
舉例: GET /es_db
格式: DELETE /索引名稱
舉例: DELETE /es_db
格式: PUT /索引名稱/類型/id
舉例:
格式: PUT /索引名稱/類型/id
舉例:
格式: GET /索引名稱/類型/id
舉例: GET /es_db/_doc/1
格式: DELETE /索引名稱/類型/id
舉例: DELETE /es_db/_doc/1
查詢操作
格式: GET /索引名稱/類型/_search
舉例: GET /es_db/_doc/_search
SQL: select * from student
格式: GET /索引名稱/類型/_search?q=:**
舉例: GET /es_db/_doc/_search?q=age:28
SQL: select * from student where age = 28
格式: GET /索引名稱/類型/_search?q=*[25 TO 26]
格式: GET /索引名稱/類型/_search?q=*[25 TO 26]
SQL: select * from student where age between 25 and 26
格式: GET /索引名稱/類型/_mget
舉例: GET /es_db/_doc/_mget
{ "ids":["1","2"] }
格式: GET /索引名稱/類型/_search?q=age:<=**
舉例: GET /es_db/_doc/_search?q=age:<=28
SQL: select * from student where age <= 28
格式: GET /索引名稱/類型/_search?q=age:>**
舉例: GET /es_db/_doc/_search?q=age:>28
SQL: select * from student where age > 28
格式: GET /索引名稱/類型/_search?q=age[25 TO 26]&from=0&size=1
舉例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1
SQL: select * from student where age between 25 and 26 limit 0, 1
格式: GET /索引名稱/類型/_search?_source=字段,字段
舉例: GET /es_db/_doc/_search?_source=name,age
SQL: select name,age from student
格式: GET /索引名稱/類型/_search?sort=字段 desc
舉例: GET /es_db/_doc/_search?sort=age:desc
SQL: select * from student order by age desc
Elasticsearch Lucene/Solr 實時流計算服務 CS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。