ES(8.1)
認證考題大綱參考如下
https://mp.weixin.qq.com/s/x7lMmMAo2563JysMJ8vgRQ
今天是我們學習ES8.1
官方搜索工程師的第一課图焰,首先第一個問題就是根據(jù)給定的需求創(chuàng)建一個索引鞠柄,本篇文章將采用如下(總分總)的形式分析該題目猜丹,第一部分先進行考題的分析回溺,猜測要考的知識點大概有什么悦荒,然后第二部分對該題目涉及的知識點進行分析講解唯欣,每一個考點后都跟著簡單的解讀,最后模擬匯總該考題搬味,最終實現(xiàn)熟練掌握該題目境氢。后續(xù)本類型文章如不特殊說明均使用該種方式進行講解蟀拷,如果有好的建議歡迎留在評論區(qū)討論
本文結(jié)構(gòu)如下:
1、題目分析(總)
2萍聊、題目拆解知識點(分)
3问芬、總結(jié)(模擬出題考試,總)
下面進入第一部分寿桨,題目分析階段
一此衅、題目分析
題目:根據(jù)給定的需求創(chuàng)建一個索引
解讀:首先我在看到這個題目的第一感覺就是這個題目很簡單,不就是創(chuàng)建個索引嗎亭螟,最多就是設(shè)置幾個主分片挡鞍,幾個副本分片,稍微再深點就是字段類型预烙、自定義分詞器墨微、索引別名,看著好像很簡單扁掸,其實實際操作起來還是有一定難度的翘县,不過考試過程中能夠查閱官網(wǎng),所以我們只要熟記考點官網(wǎng)位置即可谴分,下面我就該題目涉及到的(索引設(shè)置锈麸,字段映射類型,文本分析)這三點進行分析
通過閱讀本文牺蹄,你可以獲得什么忘伞?
1、定義一個索引常用的配置項有哪些
2钞馁、自定義字段映射與動態(tài)字段映射
3虑省、如何設(shè)置字段的數(shù)據(jù)類型
4、文本分析中 Tokenizer
僧凰、Token filter
探颈、Character filters
各自發(fā)揮什么作用以及如何設(shè)置
5、定義一個指定分片數(shù)量的索引训措,包含自定義分詞器伪节,自定義字段映射
二、題目拆解
2.1绩鸣、索引設(shè)置
2.1.1怀大、靜態(tài)索引設(shè)置
靜態(tài)索引設(shè)置是只能在索引創(chuàng)建時或者索引關(guān)閉時使用的
-
index.number_of_shards
索引主分片數(shù)量設(shè)置,默認1呀闻,只能在索引創(chuàng)建時設(shè)置化借,索引關(guān)閉時不能修改此選項
-
index.number_of_routing_shards
與
index.number_of_shards
一起使用的整數(shù)值,文檔路由到主分片的分片數(shù) -
index.codec
壓縮存儲數(shù)據(jù)策略選擇捡多,默認
LZ4
-
index.routing_partition_size
路由可以到達的分片數(shù)蓖康,默認1铐炫,只能在索引創(chuàng)建時設(shè)置,這個值必須小于
index.number_of_shards
蒜焊,除非index.number_of_shards
的值也是1 -
index.soft_deletes.enabled
索引軟刪除開關(guān)倒信,只能在創(chuàng)建索引時進行配置,默認
true
-
index.soft_deletes.retention_lease.period
軟刪除記錄保留最長期限策略泳梆,默認值
12h
-
index.load_fixed_bitset_filters_eagerly
嵌套查詢預加載緩存過濾器鳖悠,默認
true
-
index.shard.check_on_startup
分片打開時是否對分片進行檢查的開關(guān)。默認
false
优妙,還有true
,checksum
乘综,除非特別精通各配置項含義,否則不建議更改
2.1.2鳞溉、動態(tài)索引設(shè)置
動態(tài)索引設(shè)置是可以使用update-index-settings
API在激活的索引上來動態(tài)設(shè)置
更改關(guān)閉掉的靜態(tài)或者動態(tài)索引設(shè)置可能導致不正確的設(shè)置瘾带,如果不刪除或者重建索引,則無法更正這些錯誤設(shè)置
-
index.number_of_replicas
副本分片數(shù)量設(shè)置熟菲,默認為1
-
index.auto_expand_replicas
根據(jù)集群中數(shù)據(jù)節(jié)點的數(shù)量自動展開的副本數(shù)量,默認
false
關(guān)閉 -
index.search.idle.after
分片多久沒有請求或搜索會被認為是空閑的分片,默認
30s
-
index.refresh_interval
執(zhí)行refresh的間隔朴恳,默認
1s
,可以設(shè)置-1
來禁用 -
index.max_result_window
es搜索結(jié)果返回的最大記錄數(shù)量(from+size)抄罕,默認
10000
-
index.max_inner_result_window
es搜索結(jié)果中聚合桶返回的最大數(shù)量,默認
100
-
index.max_rescore_window
Rescore
請求的返回記錄最大值于颖,默認10000
-
index.max_docvalue_fields_search
查詢請求中對
docvalue_fields
數(shù)量的限制呆贿,默認100
-
Index.max_script_fields
查詢請求中允許的
script_fields
的數(shù)量最大值,默認32
-
Index.max_ngram_diff
NGramTokenizer
和NGramTokenFilter
之間min_gram
與max_gram
之間的最大差異值森渐,默認1
-
index.max_shingle_diff
shingle token filter
中max_shingle_size
與min_shingle_size
最大差值做入,默認3
-
index.max_refresh_listeners
索引分片上最大的監(jiān)聽器數(shù)量,實現(xiàn)了
refresh=wait_for
的監(jiān)聽器 -
index.analyze.max_token_count
使用analyze api 獲取最大的token數(shù)量同衣,默認
10000
-
index.highlight.max_analyzed_offset
高亮顯示時設(shè)置的最大字符數(shù)竟块,默認
1000000
-
index.max_terms_count
Term
查詢中term
的最大的數(shù)量,默認65536
-
index.max_regex_length
正則查詢中表達式的最大長度耐齐,默認
1000
-
index.query.default_field
查詢語句中查詢的字段設(shè)置浪秘,默認
*
,查詢除了元數(shù)據(jù)之外的所有字段 -
index.routing.allocation.enable
控制索引分片分配
-
all
允許所有分片分配(默認) -
primaries
只允許主分片分配 -
new_primaries
只允許新創(chuàng)建的主分片分配 -
none
不允許分片分配
-
-
index.routing.rebalance.enable
控制索引分片重新平衡
-
all
允許所有分片重新平衡(默認) -
primaries
允許主分片重新平衡 -
replicas
運行副本分片重新平衡 -
none
不允許分片重新平衡
-
-
index.gc_deletes
已刪除文檔的歷史版本號可被用于版本化操作的間隔,默認
60s
-
index.default_pipeline
設(shè)置索引默認的
ingest pipeline
-
index.final_pipeline
索引最終的
final ingest pipeline
埠况,所有的請求都會走耸携,如果該管道不存在,請求將會失敗不能使用
final ingest pipeline
修改_index
字段辕翰,如果使用final ingest pipeline
修改_index
字段夺衍,該請求將失敗 -
index.hidden
索引是否隱藏,默認 不返回隱藏的索引喜命,請求時也可以使用參數(shù)
expand_wildcards
控制沟沙,默認false
2.2河劝、映射
映射在我們的使用中有動態(tài)映射、動態(tài)映射模版尝胆、顯式設(shè)置映射三塊丧裁。動態(tài)映射也就是我們不需要使用顯式的設(shè)置字段類型,由Elasticsearch
來進行推測類型生成映射含衔;動態(tài)映射模版就是介于中間的一種煎娇,意思是我們提前設(shè)置好映射關(guān)系,并定一個模版名稱贪染、匹配規(guī)則缓呛,在進行索引插入數(shù)據(jù)的時候,根據(jù)匹配規(guī)則找到符合條件的動態(tài)模版杭隙,根據(jù)模版中的顯式設(shè)置來生成索引哟绊;顯式設(shè)置映射關(guān)系就是對索引中的每個字段都固定類型,無需進行類型推測痰憎。下面我們就以這三個方面深入的看下字段映射關(guān)系如何設(shè)置票髓,在看字段映射如何設(shè)置之前先來了解一下Elasticsearch
中的數(shù)據(jù)類型都支持哪些?
2.2.1铣耘、支持的數(shù)據(jù)類型
本文數(shù)據(jù)類型只介紹下工作中經(jīng)常使用的洽沟,個別的數(shù)據(jù)類型參考《根據(jù)給定需求創(chuàng)建索引進階篇》,后續(xù)推出都會有的蜗细,全都會有的
本文數(shù)據(jù)類型只介紹下工作中經(jīng)常使用的裆操,個別的數(shù)據(jù)類型參考《根據(jù)給定需求創(chuàng)建索引進階篇》,后續(xù)推出都會有的炉媒,全都會有的
本文數(shù)據(jù)類型只介紹下工作中經(jīng)常使用的踪区,個別的數(shù)據(jù)類型參考《根據(jù)給定需求創(chuàng)建索引進階篇》,后續(xù)推出都會有的吊骤,全都會有的
-
聚合字段類型
類型設(shè)置為
aggregate_metric_double
作為一個對象缎岗,子字段可以有min
,max
,sum
,value_count
,當我們對字段設(shè)置為aggregate_metric_double
字段做聚合時,它能夠直接使用子字段的值進行聚合水援,比如最大值就可以直接去子對象中max
的值比較密强,詳情可參考如下文章 -
字段別名類型
舉例一個實用的例子,我們在做es中數(shù)據(jù)匯總的時候有這么一個統(tǒng)計,統(tǒng)計log.level為info級別的日志蜗元,但是因為數(shù)據(jù)源來自各個渠道或渤,無法都滿足ECS(Elastic Common Schema),所以我們可以使用字段別名,比如索引1中對應(yīng)的統(tǒng)計字段是log.level.keyword,索引2對應(yīng)的是level.keyword,但是mapping又無法進行修改來完成奕扣,所以我們創(chuàng)建一個字段別名log.level對應(yīng)log.level.keyword,索引二中對應(yīng)level.keyword,我們統(tǒng)計時只需要對lov.level統(tǒng)計即可了
我們知道索引可以起一個別名薪鹦,字段也可以起一個別名,做搜索、聚合池磁、排序的時候直接使用字段別名進行查詢奔害、聚合和排序,下面是本人對字段別名的一個深度學習地熄,參考如下:
-
數(shù)組字段
數(shù)組字段沒有固定的類型华临,但是數(shù)組中的所有元素類型必須一致,數(shù)組里可以包含零個或多個元素端考,如果為空雅潭,則是代表這個數(shù)組是沒有值的字段
-
binary
二進制類型,默認該類型字段不可以被搜索却特,也不存儲
-
Boolean
接收
true
和false
或者可以解析為true
和false
的字符串”true“
和"false"
和空字符串""
-
Date
時間類型扶供,可以是
2022-08-01
或者2022-08-01 12:00:00
,也可以是一個秒數(shù)或者毫秒數(shù),時間格式可以自定義格式裂明,如果不添加使用默認格式"strict_date_optional_time||epoch_millis"
椿浓,使用時間類型字段排序時會自動轉(zhuǎn)換為時間戳毫秒數(shù)進行排序 -
Date nano
Date
類型的補充字段,納秒存儲 -
Geo
描述地理位置信息的字段數(shù)據(jù)類型闽晦,因為知識點較多扳碍,詳細信息可參考另一篇文章,通俗解讀了
geo_point
與geo_shape
兩種類型的數(shù)據(jù)仙蛉,如果查詢左腔,聚合,排序等 -
Ip
保存網(wǎng)絡(luò)地址信息捅儒,支持
ipv4
和ipv6
類型的存儲與檢索,詳細可查看官網(wǎng) -
Join
對于
Join
類型振亮,不是很常用巧还,但是也有使用,常用的我單獨摘出來寫了一篇文章坊秸,不常用或者比較簡單常見的就簡單一句話概括了麸祷,這個Join
就在下面大概說說吧,首先還是先創(chuàng)建一個索引PUT my-index-000001 { "mappings": { "properties": { "my_id": { "type": "keyword" }, "my_join_field": { "type": "join", "relations": { "user": "hobby" } } } } }
如上索引褒搔,父子文檔阶牍,指定一個人的愛好,一個人可以有多個愛好星瘾,所以創(chuàng)建索引時指定父子關(guān)系字段類型走孽,指定user
的子類為hobby
,每條文檔都有一個名稱(父文檔或子文檔
)琳状,以上圖創(chuàng)建的索引為例磕瓷,每個文檔都要指定這是個user
還是個hobby
,如下,文檔1
是父文檔張三
用戶困食,文檔2
是父文檔李四
用戶边翁,文檔3,4
是張三
的愛好硕盹,文檔5符匾,6
是李四
的愛好
PUT my-index-000001/_doc/1?refresh
{
"my_id": "1",
"text": "張三",
"my_join_field": {
"name": "user"
}
}
PUT my-index-000001/_doc/2?refresh
{
"my_id": "2",
"text": "李四",
"my_join_field": {
"name": "user"
}
}
PUT my-index-000001/_doc/3?routing=1&refresh
{
"my_id": "3",
"text": "乒乓球",
"my_join_field": {
"name": "hobby",
"parent": "1"
}
}
PUT my-index-000001/_doc/4?routing=1&refresh
{
"my_id": "4",
"text": "籃球",
"my_join_field": {
"name": "hobby",
"parent": "1"
}
}
PUT my-index-000001/_doc/5?routing=1&refresh
{
"my_id": "5",
"text": "讀書",
"my_join_field": {
"name": "hobby",
"parent": "2"
}
}
PUT my-index-000001/_doc/6?routing=1&refresh
{
"my_id": "6",
"text": "下棋",
"my_join_field": {
"name": "hobby",
"parent": "2"
}
}
需要注意的是 寫入數(shù)據(jù)時必須指定路由值,因為父子文檔必須保證數(shù)據(jù)存儲在同一個分片
一個父文檔可以有多個子文檔,如下,user
是hobby
和girlfriend
的父類瘩例,grielfriend
是fans
的父類
<img src="/Users/cxt/Documents/personal/wechataccount/doc/database/elasticsearch/es8.1認證/根據(jù)給定的需求創(chuàng)建一個索引.assets/image-20220901223720420.png" alt="image-20220901223720420" style="zoom: 67%;" />
PUT my-index-000001
{
"mappings": {
"properties": {
"my_join_field": {
"type": "join",
"relations": {
"user": ["hobby", "girlfriend"],
"girlfriend": "fans"
}
}
}
}
}
-
Keyword
- 關(guān)鍵字類型啊胶,單一的內(nèi)容,比如身份證仰剿,姓名创淡,Ip 等這種數(shù)據(jù)使用
- 常量類型字段,一個索引中該字段的值是固定不變的南吮,創(chuàng)建索引時指定琳彩,如果與指定的值不同,文檔拒絕寫入
- 模糊查詢類型部凑,模糊查詢可在
keyword
類型時使用露乏,通配符類型在文本內(nèi)容基數(shù)較大時候的做了優(yōu)化
關(guān)鍵字類型數(shù)據(jù)可以用于聚合,排序涂邀,查詢(
term
) -
Nested
嵌套對象類型瘟仿,作為一個單獨的
lucene
文檔索引漏策,支持查詢柠逞,排序术吝,聚合魔熏,聚合父文檔等功能逃片,詳細可參考博主的另一篇Nested
詳解擅威,點擊標簽即可訪問 -
Numeric
數(shù)字類型缕坎,支持
long
逆甜、integer
衣洁、short
墓捻、byte
、double
坊夫、float
砖第、half_float
、scaled_float
环凿、unsigned_long
對于整數(shù)類型梧兼,使用
long
、integer
拷邢、short
袱院、byte
就可以,浮點數(shù)可以使用scaled_float
,如果scaled_float
不能滿足忽洛,那可以選取精讀更高的double
腻惠、float
、half_float
-
Object
在學習
Nested
嵌套對象類型的時候我們已經(jīng)提到了一點欲虚,如果我們不知道對象類型集灌,默認的就是Object
類型的數(shù)據(jù),在Elasticsearch
內(nèi)部复哆,這個文檔會被索引成一個簡單扁平化的鍵值對形式 -
Range
表示一個范圍內(nèi)的數(shù)據(jù)欣喧,使用
gt
或者gte
定義下界,使用lt
梯找、lte
定義上界唆阿,不過支持的聚合的類型有限,支持histogram
或者cardinality
支持的類型有
integer_range
锈锤、float_range
驯鳖、long_range
、double_range
久免、date_range
浅辙、ip_range
-
Text
文本類型、為了
text
和match_only_text
阎姥,text
傳統(tǒng)的全文檢索字段類型记舆;match_only_text
一種優(yōu)化占用空間的文本類型,關(guān)閉打分呼巴,對需要執(zhí)行查看進行較慢的操作泽腮,適合用作日志索引一般情況下使用
text
文件類型的字段還會使用一個keyword
的字段,進行聚合衣赶、排序盛正、關(guān)鍵字匹配等操作
2.2.2、字段動態(tài)映射
何為Dynamic mapping屑埋,我們知道在使用關(guān)系型數(shù)據(jù)庫mysql
的時候,我們創(chuàng)建一個表之后需要創(chuàng)建字段痰滋,比如字符串ID摘能,字符串NAME,時間類型CREATE_TIME等字段來使用敲街,而Elasticsearch
強大的就在于我們不在像關(guān)系型數(shù)據(jù)庫那樣提前設(shè)置好字段以及每個字段的類型团搞,我們只需要保存一個文檔,ES會自動的推斷出數(shù)據(jù)類型并創(chuàng)建好索引多艇,類型逻恐,字段映射關(guān)系等
當Elasticsearch
檢測到新字段時,默認情況下Elasticsearch
會自動的識別字段數(shù)據(jù)類型,并將字段添加到mapping
映射中复隆,但是我們可以通過參數(shù)dynamic
來指定是否自動添加字段映射拨匆,可選值有true
和runtime
,如果為true
默認使用以下規(guī)則生成字段映射關(guān)系
JSON data type | "dynamic":"true" | "dynamic":"runtime" |
---|---|---|
null | ||
true or false | boolean | boolean |
double | float | double |
long | long | long |
object | object | |
array | 根據(jù)數(shù)組中第一個非空的值判斷 | 根據(jù)數(shù)組中第一個非空的值判斷 |
日期類型的字符串 | date | date |
數(shù)字類型的字符串 | float or long | double or long |
不是日期也不是數(shù)字的字符串 |
text 類型以及.keyword 的字類型 |
keyword |
也可以設(shè)置dynamic
為false
挽拂,這樣在遇到新的字段時會拋出異常
2.2.3惭每、字段動態(tài)映射模版
上面我們看到Elasticsearch
會自動的推斷數(shù)據(jù)類型,生成字段映射亏栈,那么Dynamic template
動態(tài)模版就是自定義映射台腥,提前內(nèi)置好映射關(guān)系,在使用時通過一定的規(guī)則匹配上即可
如下:如果字段名稱是ip開頭的字符串绒北,映射為ip類型的運行時字段
PUT my-index-000001/
{
"mappings": {
"dynamic_templates": [
{
"strings_as_ip": {
"match_mapping_type": "string",
"match": "ip*",
"runtime": {
"type": "ip"
}
}
}
]
}
}
如果想加到mapping
中只需替換runtime
為mapping
即可
PUT my-index-000001/
{
"mappings": {
"dynamic_templates": [
{
"strings_as_ip": {
"match_mapping_type": "string",
"match": "ip*",
"mapping": {
"type": "ip"
}
}
}
]
}
}
2.2.4黎侈、自定義字段映射
自定義字段映射,其實就是關(guān)系數(shù)據(jù)庫中創(chuàng)建表時的字段設(shè)置闷游,顧名思義就是提前設(shè)置好索引需要的字段以及字段類型峻汉,在添加文檔時如遇到新字段報錯(可配置),一般在規(guī)范索引字段時使用储藐,比如日志索引俱济,根據(jù)日期每天定時生成一個新的索引,這個索引我們就可以提前設(shè)置好模版钙勃,生成索引時直接使用模版生成蛛碌,而模版中,直接定義好字段的類型辖源,也就是說蔚携,自定義字段映射關(guān)系可以在映射模版的基礎(chǔ)上使用的(關(guān)于索引模版的使用查看后文)如下是自定義字段映射的一個小例子
我們創(chuàng)建一個索引my-index-000001
,其中age
時integer
類型克饶,email
是keyword
類型酝蜒,name
是text
類型
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
后續(xù)如果我們想修改這個已經(jīng)創(chuàng)建的索引,比如增加個字段矾湃,那可以使用如下語句
PUT /my-index-000001/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
查看索引mapping
語句如下
# 查看所有的字段映射
GET my-index-000001/_mapping
# 查看某一個字段的映射關(guān)系亡脑,此處以age舉例
GET my-index-000001/_mapping/field/age
2.3、文本分析
2.3.1邀跃、什么是文本分析
文本分析是Elasticsearch
實現(xiàn)全文檢索的前提霉咨,通過全文檢索可以實現(xiàn)返回結(jié)果不僅包含精確完全匹配的結(jié)果,還包含相近的結(jié)果拍屑。比如我們有個數(shù)據(jù)中華人民共和國
途戒,其中我們搜索中華
或者人民
或者共和國
或者其他組合詞語的時候都可以搜索出來,不僅限于中華人民共和國
Tokenization
: 當我們進行全文檢索時僵驰,分詞可以讓我們把一個詞語拆分成更小的詞語喷斋,默認情況下唁毒,這些小的詞語也是有單獨的詞語語義-
Normalization
: 其中Tokenization
可以解決單個關(guān)鍵詞的匹配查詢, 但是還是精確匹配星爪,不能解決以下這種情況的查詢-
Quick
與quick
的大小寫 -
fox
與foxes
的詞根 -
jumps
與leaps
的近義詞
為了解決這些問題浆西,文本分析可以將這些token分詞規(guī)范化為標準格式,這樣就可以實現(xiàn)大小寫移必,詞根匹配室谚,近義詞匹配。
為了確保搜索時搜索詞與預期的詞匹配崔泵,盡量要使用相同的
tokenization
和normalization
規(guī)則 -
2.3.2秒赤、配置文本分析器
默認情況下,Elasticsearch
使用standard analyzer
憎瘸,如果不能滿足我們的需求入篮,我們可以使用其他的內(nèi)置分析器,或者自定義分詞器幌甘,分析器的組成有三部分潮售,character filter
、tokenizer
锅风、token filter
其中這三部分都可以根據(jù)我們的需求來進行選擇設(shè)置
-
Character filter
翻譯一下就是字符過濾器酥诽,用在分詞之前,常用的有html符號移除皱埠,正則替換肮帐、映射字符替換
-
Tokenizer
核心分詞器,將一組字符流拆成單個詞語边器,具體的分詞策略在此實現(xiàn)训枢,默認的標準分詞器,常用的中文分詞器忘巧,英文分詞器恒界、拼音分詞器等
-
Token filter
分詞之后的詞語過濾,比如英文中的停用詞移除(a,an,the)砚嘴、轉(zhuǎn)換大小寫等
2.3.4十酣、自定義分詞器
需求
- 實現(xiàn)中文分詞
- 實現(xiàn)拼音分詞(詞語全拼,詞語首字母簡拼)
- 實現(xiàn)
:) => _happy_
,:( => _sad_
- 使用
pattern_replace
替換我
為機智如我
解決方案
- 使用中文
IK分詞器
加拼音分詞器
組合實現(xiàn)上述需求1际长,2
- 使用
char_filter
實現(xiàn)上述需求3
- 使用
filter
實現(xiàn)上述需求4
過程分析
首先自定義分詞器ik_smart_pinyin
與ik_max_pinyin
-
ik_smart_pinyin
:簡單分詞婆誓,分的比較粗,詞語少 -
ik_max_pinyin
:最大粒度分詞也颤,分的比較細,詞語多
其中ik_smart_pinyin
加入pinyin_first_letter_and_full_pinyin_filter
實現(xiàn)拼音分詞
ik_max_pinyin
也加入pinyin_first_letter_and_full_pinyin_filter
實現(xiàn)拼音分詞郁轻,但是為了對比翅娶,此處ik_max_pinyin
分詞器再加入自定義的pattern_replace_filter
實現(xiàn)上述的需求4
文留,加入my_mappings_char_filter
實現(xiàn)上述需求3
settings全部內(nèi)容
完整的創(chuàng)建索引settings
內(nèi)容如下
PUT ik_index
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart_pinyin": {
"tokenizer": "ik_smart",
"filter": [
"pinyin_first_letter_and_full_pinyin_filter"
]
},
"ik_max_pinyin": {
"tokenizer": "ik_max_word",
"filter": [
"pinyin_first_letter_and_full_pinyin_filter",
"pattern_replace_filter"
],
"char_filter": "my_mappings_char_filter"
}
},
"filter": {
"pinyin_first_letter_and_full_pinyin_filter": {
"type": "pinyin",
"keep_separate_first_letter": false,
"keep_full_pinyin": true,
"keep_original": true,
"limit_first_letter_length": 16,
"lowercase": true,
"remove_duplicated_term": true
},
"pattern_replace_filter": {
"type": "pattern_replace",
"pattern": "(我)",
"replacement": "機智如$1"
}
},
"char_filter": {
"my_mappings_char_filter": {
"type": "mapping",
"mappings": [
":) => _happy_",
":( => _sad_"
]
}
}
}
}
}
2.4、小結(jié)
在上面創(chuàng)建的自定義分詞器的基礎(chǔ)上竭沫,我們在創(chuàng)建mapping
字段關(guān)系映射時就可以直接指定ik_smart_pinyin
或者ik_max_pinyin
分詞器即可實現(xiàn)分詞啦燥翅,如下示例所示:
PUT ik_index/_mapping/
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_smart_pinyin"
}
}
}
三、總結(jié)
假總結(jié)蜕提,真心理總結(jié)
通過上面的學習森书,我們知道了設(shè)置索引時的常用參數(shù)、常見的字段類型以及建立字段映射關(guān)系時的參數(shù)設(shè)置谎势,可以看得出來凛膏,創(chuàng)建索引就這三塊,只要這三塊使用熟練了脏榆,哪怕不查看官網(wǎng)也可以直接創(chuàng)建出一個滿足自己需求的索引猖毫,鑒于考試時也都是可以參考官網(wǎng)的,所以上面的內(nèi)容也不用死記硬背须喂,只需要理解吁断,多操作,記住常見的配置項即可了坞生。好了該篇文章已經(jīng)進入尾聲了仔役,一直想早點結(jié)束,但是寫著寫著就發(fā)現(xiàn)是己,知識點太多又兵, 假設(shè)都寫到這篇文章里,那就長的過分了赃泡,所以文中就分了幾篇小的寒波,比如字段類型那塊,Geo升熊、Nested等單獨輸出了一篇文章俄烁,想?yún)⒖紝W習的可以關(guān)注公眾號【醉魚JAVA】直接去獲取。后面的話级野,也是盡快吧页屠,盡量趕點進度,把工作中常用的知識點整理起來蓖柔,結(jié)合考點輸出匯總辰企,如果大家有好的意見或者建議歡迎評論區(qū)留言,下篇文章見嘍?雒@蚊场!
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布镐捧!