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