Elasticsearch創(chuàng)建一個索引怎么也這么復雜

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

    NGramTokenizerNGramTokenFilter 之間min_grammax_gram之間的最大差異值森渐,默認1

  • index.max_shingle_diff

    shingle token filtermax_shingle_sizemin_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的值比較密强,詳情可參考如下文章

    https://mp.weixin.qq.com/s/erLmbgMA9mMrytSAQ9Bt3Q

  • 字段別名類型

    舉例一個實用的例子,我們在做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)計即可了

    我們知道索引可以起一個別名薪鹦,字段也可以起一個別名,做搜索、聚合池磁、排序的時候直接使用字段別名進行查詢奔害、聚合和排序,下面是本人對字段別名的一個深度學習地熄,參考如下:

    https://mp.weixin.qq.com/s/YMm-CedHtPnY6MIvGE1X9g

  • 數(shù)組字段

    數(shù)組字段沒有固定的類型华临,但是數(shù)組中的所有元素類型必須一致,數(shù)組里可以包含零個或多個元素端考,如果為空雅潭,則是代表這個數(shù)組是沒有值的字段

  • binary

    二進制類型,默認該類型字段不可以被搜索却特,也不存儲

  • Boolean

    接收truefalse或者可以解析為truefalse的字符串”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_pointgeo_shape兩種類型的數(shù)據(jù)仙蛉,如果查詢左腔,聚合,排序等

    https://mp.weixin.qq.com/s/nw2_M8icS3v94w4sfrbqaw

  • Ip

    保存網(wǎng)絡(luò)地址信息捅儒,支持ipv4ipv6類型的存儲與檢索,詳細可查看官網(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ù)存儲在同一個分片

一個父文檔可以有多個子文檔,如下,userhobbygirlfriend的父類瘩例,grielfriendfans的父類

<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墓捻、bytedouble坊夫、float砖第、half_floatscaled_float环凿、unsigned_long

    對于整數(shù)類型梧兼,使用longinteger拷邢、short袱院、byte就可以,浮點數(shù)可以使用scaled_float,如果scaled_float不能滿足忽洛,那可以選取精讀更高的double腻惠、floathalf_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_rangedouble_range久免、date_range浅辙、ip_range

  • Text

    文本類型、為了textmatch_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來指定是否自動添加字段映射拨匆,可選值有trueruntime,如果為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è)置dynamicfalse挽拂,這樣在遇到新的字段時會拋出異常

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中只需替換runtimemapping即可

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,其中ageinteger類型克饶,emailkeyword類型酝蜒,nametext類型

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)鍵詞的匹配查詢, 但是還是精確匹配星爪,不能解決以下這種情況的查詢

    • Quickquick的大小寫
    • foxfoxes的詞根
    • jumpsleaps的近義詞

    為了解決這些問題浆西,文本分析可以將這些token分詞規(guī)范化為標準格式,這樣就可以實現(xiàn)大小寫移必,詞根匹配室谚,近義詞匹配。

    為了確保搜索時搜索詞與預期的詞匹配崔泵,盡量要使用相同的tokenizationnormalization規(guī)則

2.3.2秒赤、配置文本分析器

默認情況下,Elasticsearch使用standard analyzer憎瘸,如果不能滿足我們的需求入篮,我們可以使用其他的內(nèi)置分析器,或者自定義分詞器幌甘,分析器的組成有三部分潮售,character filtertokenizer锅风、token filter其中這三部分都可以根據(jù)我們的需求來進行選擇設(shè)置

  • Character filter

    翻譯一下就是字符過濾器酥诽,用在分詞之前,常用的有html符號移除皱埠,正則替換肮帐、映射字符替換

  • Tokenizer

    核心分詞器,將一組字符流拆成單個詞語边器,具體的分詞策略在此實現(xiàn)训枢,默認的標準分詞器,常用的中文分詞器忘巧,英文分詞器恒界、拼音分詞器

  • Token filter

    分詞之后的詞語過濾,比如英文中的停用詞移除(a,an,the)砚嘴、轉(zhuǎn)換大小寫

2.3.4十酣、自定義分詞器

需求

  1. 實現(xiàn)中文分詞
  2. 實現(xiàn)拼音分詞(詞語全拼,詞語首字母簡拼)
  3. 實現(xiàn):) => _happy_,:( => _sad_
  4. 使用pattern_replace替換機智如我

解決方案

  • 使用中文IK分詞器拼音分詞器組合實現(xiàn)上述需求1际长,2
  • 使用char_filter實現(xiàn)上述需求3
  • 使用filter實現(xiàn)上述需求4

過程分析

首先自定義分詞器ik_smart_pinyinik_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ā)布镐捧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潜索,一起剝皮案震驚了整個濱河市臭增,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竹习,老刑警劉巖誊抛,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異整陌,居然都是意外死亡拗窃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門泌辫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來随夸,“玉大人,你說我怎么就攤上這事甥郑√悠牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵澜搅,是天一觀的道長伍俘。 經(jīng)常有香客問我,道長勉躺,這世上最難降的妖魔是什么癌瘾? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮饵溅,結(jié)果婚禮上妨退,老公的妹妹穿的比我還像新娘。我一直安慰自己蜕企,他們只是感情好咬荷,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轻掩,像睡著了一般幸乒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唇牧,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天罕扎,我揣著相機與錄音,去河邊找鬼丐重。 笑死腔召,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扮惦。 我是一名探鬼主播臀蛛,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崖蜜!你這毒婦竟也來了浊仆?” 一聲冷哼從身側(cè)響起烙肺,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氧卧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氏堤,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡沙绝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼠锈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闪檬。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖购笆,靈堂內(nèi)的尸體忽然破棺而出粗悯,到底是詐尸還是另有隱情,我是刑警寧澤同欠,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布样傍,位于F島的核電站,受9級特大地震影響铺遂,放射性物質(zhì)發(fā)生泄漏衫哥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一襟锐、第九天 我趴在偏房一處隱蔽的房頂上張望撤逢。 院中可真熱鬧,春花似錦粮坞、人聲如沸蚊荣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽互例。三九已至,卻和暖如春姓迅,著一層夾襖步出監(jiān)牢的瞬間敲霍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工丁存, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肩杈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓解寝,卻偏偏與公主長得像扩然,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聋伦,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容