這部分文檔主要包含:html
- 倒排索引
- Analyzer分詞
作個類比,看書時,咱們看到了哪一個章節,根據章節標題去目錄中檢索具體的內容。可是當咱們回憶起一些隻言片語,一些句子,一些情節時,去定位它出現的章節和頁碼,就便相似於倒排索引了。正則表達式
在es中,正排索引就是文檔id和文檔內容的關聯,而倒排索引就是文檔內容和文檔id的關聯。json
下面是三個文檔bash
文檔id | 內容 |
---|---|
1 | study elasticsearch |
2 | learn elasticsearch |
3 | elasticsearch method |
通過倒排索引後elasticsearch
Term(單詞) | Count | DocumentID:Position |
---|---|---|
elasticsearch | 3 | 1:1,2:4,3:0 |
study | 1 | 1:0 |
learn | 1 | 2:0 |
method | 1 | 3:1 |
(Term,一段文本通過分析後會輸出一串單詞,一個一個的叫作Term)ide
以上就是一個簡單的正排索引和倒排索引的例子post
一個例子-以單詞 elasticsearch
爲例性能
文檔id | 內容 |
---|---|
1 | study elasticsearch |
2 | learn elasticsearch |
3 | elasticsearch method |
elasticsearch的Posting List
以下測試
Doc Id | TF | Position | Offset |
---|---|---|---|
1 | 1 | 1 | <6,19> |
2 | 1 | 1 | <6,19> |
3 | 1 | 0 | <0,13> |
Analysis
(文本分析) - 是把全文的轉換爲一系列單詞(term/token)的過程,也叫分詞Analysis
是經過 Analyzer
來實現的
input:
Elasticsearch Server
output:
elasticsearch
server
# 仔細看會發現,通過分詞器處理後,Elasticsearch被轉換成了elasticsearch,大寫字母自動轉換成了小寫
複製代碼
GET /_analyze
{
"analyzer": "standard",
"text":"Mastering Elasticsearch,elasticsearch in Action"
}
複製代碼
POST my_index/_analyze
{
"field": "title",
"text": "Mastering Elasticsearch"
}
複製代碼
POST /_analyze
{
"tokenizer": "standard",
"filter": ["lowercase"],
"text": "Mastering Elastricsearch"
}
複製代碼
名稱 | 做用 |
---|---|
Standard Analyzer | 默認分詞器,按詞切分,小寫處理 |
Simple Analyzer | 按照非字母切分(符號被過濾),小寫處理 |
Stop Analyzer | 小寫處理,停用詞過濾(a/the/is) |
Whitespace Analyzer | 按照空格切分,不轉小寫 |
Keyword Analyzer | 部分詞,直接將輸入當作輸出 |
Patter Analyzer | 正則表達式,默認\W+(非字符分割) |
Language | 提供了30多種常見語言的分詞器 |
Customer Analyzer | 自定義分詞器 |
\W+
,非字符的符號進行分隔一組分析特定語言文本的分析器,支持如下類型:
arabic
,armenian
,basque
,bengali
,brazilian
,bulgarian
,catalan
,cjk
,czech
,danish
,dutch
,english
,finnish
,french
,galician
,german
,greek
,hindi
,hungarian
,indonesian
,irish
,italian
,latvian
,lithuanian
,norwegian
,persian
,portuguese
,romanian
,russian
,sorani
,spanish
,swedish
,turkish
,thai
.ui
GET _analyze
{
"analyzer": "icu_analyzer",
"text": "這事的確肯定不下來"
}
複製代碼
分詞結果
{
"tokens" : [
{
"token" : "這",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "事",
"start_offset" : 1,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "的確",
"start_offset" : 2,
"end_offset" : 4,
"type" : "<IDEOGRAPHIC>",
"position" : 2
},
{
"token" : "肯定",
"start_offset" : 4,
"end_offset" : 6,
"type" : "<IDEOGRAPHIC>",
"position" : 3
},
{
"token" : "不下來",
"start_offset" : 6,
"end_offset" : 9,
"type" : "<IDEOGRAPHIC>",
"position" : 4
}
]
}
複製代碼
本篇中接觸了es的倒排索引結構和各類analyzer分詞器,並基本介紹了各分詞器的基本使用,較爲簡單。
以爲不錯,請點個贊吧