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