关于ElasticSearch(es) 的基本使用教程总结(全)
關(guān)于各個組件安裝教程可以參考網(wǎng)上的教程有很多? ?建議用docker安裝否則需要前端環(huán)境等有些麻煩
ElasticSearch介紹
Elasticsearch 是一個分布式、高擴(kuò)展、高實(shí)時的搜索與數(shù)據(jù)分析引擎。?通過簡單的 RESTful API 來隱藏 Lucene 的復(fù)雜性,從而讓全文搜索變得簡單。本身擴(kuò)展性好,可以擴(kuò)展到上百臺服務(wù)器,處理 PB 級別的數(shù)據(jù)。
ElasticSearch 與 Solr 的區(qū)別
1、ElasticSearch 開箱即用,Solr 需要安裝。
2、Solr 利用 Zookeeper 進(jìn)行分布式管理,而 ElasticSearch 自身帶有分布式協(xié)調(diào)管理功能。
3、Solr 支持更多格式的數(shù)據(jù),例如 JSON、XML、CSV,而 ElasticSearch 僅支持 JSON 文件格式。
4、Solr 官方提供的功能更多,而 ElasticSearch 本身更注重于核心功能,高級功能多由第三方插件提供,例如圖形化界面需要 kibana 友好支撐。
5、Solr 查詢快,但更新索引時慢,用于電商等查詢多的應(yīng)用。ElasticSearch 建立索引快即實(shí)時性查詢快,用于 facebook、新浪等搜索應(yīng)用。
6、Solr 是傳統(tǒng)搜索應(yīng)用的有力解決方案,ElasticSearch 更適用于新興的實(shí)時搜索應(yīng)用。
ElasticSearch 核心概念
ElasticSearch 是面向文檔的索引,ElasticSearch 與關(guān)系型數(shù)據(jù)庫的對比:
ElasticSearch 本身就是集群,可以通過可視化界面右上角你的信息查看。ElasticSearch 的默認(rèn)集群名就是 elasticsearch。ElasticSearch 在后臺把每個索引劃分成多個分片,每分分片可以在集群中的不同服務(wù)器間遷移。
文檔:一條條數(shù)據(jù)和記錄,是索引和搜索數(shù)據(jù)的最小單位,是鍵值對,是 Json 對象。
類型:字段類型映射,逐漸過時,因?yàn)?ElasticSearch 會自動猜測類型。
索引:映射類型的容器,文檔集合,類似于數(shù)據(jù)庫,會被存儲到各個分片上。
分片:一個索引默認(rèn)有5個分片,主分片和對應(yīng)的復(fù)制分片都不會在同一個節(jié)點(diǎn)內(nèi),這樣有利于某個節(jié)點(diǎn)掛掉了,數(shù)據(jù)也不至于丟失。實(shí)際上,一個分片是一個 Lucene 索引,一個包含倒排索引的文件目錄。倒排索引的結(jié)構(gòu)使得 ElasticSearch 在不掃描全部文檔的情況下,就能告知哪些文檔中包含特定的關(guān)鍵字。
倒排索引
ElasticSearch 使用的是一種稱為倒排索引的結(jié)構(gòu),采用 Lucene 倒排索引作為底層。這種結(jié)構(gòu)適用于快速的全文搜索,一個索引由文檔中所有不重復(fù)的列表構(gòu)成,對于每一個詞,都有一個包含它的文檔列表。文檔保存到索引庫的時候,將每個文檔拆分成獨(dú)立的詞(或稱為詞條或 tokens ),創(chuàng)建包含所有不重復(fù)的詞條的排序列表,列出每個詞條出現(xiàn)在哪個文檔,兩個文檔都匹配,但是第一個文檔比第二個匹配程度更高。如果沒有別的條件,這兩個包含關(guān)鍵字的文檔都將返回。
IK 分詞器
IK 提供了兩個分詞算法:ik_smart 和 ik_max_word。其中 ik_smart 為最少切分,ik_max_word 為最細(xì)粒度劃分。
?<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
? ? <comment>IK Analyzer 擴(kuò)展配置</comment>
? ? <!--用戶可以在這里配置自己的擴(kuò)展字典 -->
? ? <entry key的擴(kuò)展停止詞字典-->
? ? <entry key="ext_stopwords"></entry>
? ? <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展字典 -->
? ? <!-- <entry key="remote_ext_dict">words_location</entry> -->
? ? <!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展停止詞字典-->
? ? <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
?記得重啟es
字段類型概述
字符串類型:text、keyword
數(shù)值類型:long、integer、short、byte、double、float、half float、scaled、float
日期類型:date
布爾值類型:boolean
二進(jìn)制類型:binary
? 字符串類型ElasticSearch對字符串擁有兩種完全不同的搜索方式. 你可以按照整個文本進(jìn)行匹配, 即關(guān)鍵詞搜索(keyword search), 也可以按單個字符匹配, 即全文搜索(full-text search).前者的字符串被稱為not-analyzed字符, 而后者被稱作analyzed字符串。text用于全文搜索的, 而keyword用于關(guān)鍵詞搜索.
text
當(dāng)一個字段是要被全文搜索的,比如Email內(nèi)容、產(chǎn)品描述,應(yīng)該使用text類型。設(shè)置text類型以后,字段內(nèi)容會被分析,在生成倒排索引以前,字符串會被分析器分成一個一個詞項(xiàng)。text類型的字段不用于排序,很少用于聚合。
PUT my_index {"mappings": {"_doc": {"properties": {"name": {"type": "text"}}}}} }如果不指定類型,ElasticSearch字符串將默認(rèn)被同時映射成text和keyword類型,會自動創(chuàng)建下面的動態(tài)映射(dynamic mappings):
{"foo": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}ignore_above忽略長度超過256字符串。
這就是造成部分字段還會自動生成一個與之對應(yīng)的“.keyword”字段的原因。
一個字符串字段可以映射為text字段用于全文本搜索,也可以映射為keyword字段用于排序或聚合,這時候需要用到fields設(shè)置多字段。如果業(yè)務(wù)關(guān)系中,需要該字段支持兩種類型的查詢,可以設(shè)置為如下形式:
PUT my_index {"mappings": {"_doc": {"properties": {"name": {"type": "text","fields": {"raw": { "type": "keyword"}}}}}} }name.raw字段是name字段的keyword版本。
keyword
keyword類型適用于索引結(jié)構(gòu)化的字段,比如email地址、主機(jī)名、狀態(tài)碼和標(biāo)簽。如果字段需要進(jìn)行過濾(比如查找已發(fā)布博客中status屬性為published的文章)、排序、聚合。keyword類型的字段只能通過精確值搜索到。
{"foo": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}} }在ES里為已有索引增加一個新字段以后,老的數(shù)據(jù)并不會自動就擁有了這個新字段,也就不可能給他一個所謂的默認(rèn)值。ES里的數(shù)據(jù)都是文檔型的,修改一個文檔只能是對原文檔做更新,也就是只能借助于重新索引的手段。
?
NULL在ES里的含義和RDBMS非常不同。?
?
NULL的意思是索引的時候,某個字段沒有被賦值,例如文檔有"city","title"和"status_code"三個字段。
?
索引的時候漏掉status_code字段:
?
?處理 Null 值 | Elasticsearch: 權(quán)威指南 | Elastic最好的筆記是官方文檔,其他類型的字段就先不介紹了
關(guān)于索引的基本操作
創(chuàng)建索引:PUT /索引名/類型名/文檔id{請求體}
mappings類似與數(shù)據(jù)庫建表時候指定字段,es中如果不指定es會默認(rèn)猜幫你創(chuàng)建類型,類型名可以省略(表名)默認(rèn)_doc 在以后版本可能會被廢棄?
獲取索引信息:GET 索引名
查看 ElasticSearch 集群的健康值:GET _cat/health
更新索引
方法一:重新 PUT,版本號增加,狀態(tài)變?yōu)?updated
?方法2:使用 POST,只更新其中一個字段,可以防止更新時數(shù)據(jù)遺漏
刪除索引 delete?只能刪除文檔或索引,不能刪除類型
批量增刪改查BULK,必須是POST請求
關(guān)于文檔的基本操作
?上邊這是查詢方式之一?還有一種dsl操作
?
?hits里面包含了索引的文檔的id的信息,里面_source包含了數(shù)據(jù),_sorce是指分?jǐn)?shù),即匹配度,越高的越前
排序
分頁
from size 有點(diǎn)像limit start pagesize
boolen值查詢
上邊換成should相當(dāng)于mysql中的or?
范圍查詢
?匹配多個值
精確查找是term 是使用倒排索引精確查找
?
ES整合springData
導(dǎo)入依賴
配置文件
?
?
DAO
?實(shí)體類映射操作
?測試索引操作
?文檔操作
?
分頁查詢
?文檔搜索
總結(jié)
以上是生活随笔為你收集整理的关于ElasticSearch(es) 的基本使用教程总结(全)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zabbix 5.0 版本企业微信群机器
- 下一篇: Clinet/Server在工作线程中刷