最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearch?mapping?概念及自動創(chuàng)建示例

 更新時間:2022年11月04日 10:29:26   作者:AskaJohnny  
這篇文章主要為大家介紹了Elasticsearch?mapping?概念及自動創(chuàng)建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

本篇主要介紹一下 Elasticsearch mapping 的概念, 它是什么 以及如何自定義它, 并且再介紹一下 dynamic 的機(jī)制

如果把 Elasticsearch中的mapping 對比到 mysql 中 就是 mysql中的 表的 scheme , 就是表的定義結(jié)構(gòu),

正常在 關(guān)系型數(shù)據(jù)庫mysql中 需要先把表的scheme 定義好 再插入數(shù)據(jù), 并且 你無法插入未在scheme 中定義的字段 , 而 es 中 可以在你未給索引定義 mapping 的時候 自動幫你創(chuàng)建 mapping , 并且你也可以通過 dynamic 來控制是否允許靈活動態(tài)的 添加 mapping中的屬性

1.什么是Mapping

Mapping 類似 mysql 中的 schema 的定義,就是定義索引屬性字段的

  • 定義索引中字段的名稱
  • 定義索引中字段的數(shù)據(jù)類型 , 如 text , long , keyword....
  • 定義索引中字段的的倒排索引相關(guān)配置 ( Analyzer...)

一個Mapping 屬于一個索引的Type

  • 每個文檔都屬于一個Type
  • 一個Type有一個Mapping 定義
  • es7.0開始, 在Mapping中不需要指定 Type信息, 因?yàn)?.0之后只有_doc Type

2.es 自動創(chuàng)建mapping

當(dāng)我們?nèi)?chuàng)建一個 索引的時候 未指定 mapping , es會默認(rèn)幫這個索引創(chuàng)建一個 mapping

創(chuàng)建一個 索引并且索引一條數(shù)據(jù)

PUT blog/_doc/1
{
  "name": "es mapping",
  "type": "es",
  "desc": "es mapping desc",
  "author": "johnny",
  "word_count": 50,
  "create_time": "2022-10-31"
}
GET blog/_mapping  # 查看一個 es自動生成的 mapping

從上面可以看出來 屬性都被es 自動創(chuàng)建了 對應(yīng)的mapping , 包括每個屬性的type類型等, 那它為什么會這樣轉(zhuǎn)化的,什么時候是 text, 什么時候是 long 下面就來介紹 es 中mapping 的 類型自動識別

3. mapping 類型自動識別

JSON類型Elasticsearch 類型
字符串1.匹配日期格式 會設(shè)置成Date 
2.匹配數(shù)字 設(shè)置成 float 或者 long ,該選項(xiàng)默認(rèn)關(guān)閉的 
3.設(shè)置成Text , 并且添加 keyword 子字段
整數(shù)long
浮點(diǎn)數(shù)float
布爾值boolean
對象object
數(shù)組由第一個非空數(shù)值的類型所定義 .如 ["jack","johnny"] 則類型為 Text
空值忽略 ??? 
我實(shí)驗(yàn)的版本里7.18 , 如果設(shè)置null 會被自動定義為Text , 具體不太清楚

4. 自定義創(chuàng)建mapping

除了上面的介紹的 es 自動創(chuàng)建 mapping 外, 還可以自定義 索引的mapping , 更加靈活和符合業(yè)務(wù)需求等等.

注意以前的版本需要在 mappings 下面還有一層 type , 如 mappings: { "_doc" : { "properties" : {xxx} }} 但是7.0之后 type就不需要了

PUT blog_info
{
  "mappings": {
      "properties": {
        "blog_name": {
          "type": "keyword"
        },
        "blog_desc": {
          "type": "text"
        },
        "blog_word_count": {
          "type": "long"
        },
        "create_time": {
          "type": "date"
        }
      }
    }
}

其中text和keyword類型,text類型的字段在新增或修改文檔時會自動分詞, 而keyword 不會,它會保存插入的原始文本

索引一條數(shù)據(jù)

PUT blog_info/_doc/1
{
  "blog_name": "es mapping",
  "blog_desc": "es mapping desc",
  "blog_word_count": 12,
  "blog_auther": "johnny",
  "create_time": "2022-10-31"
}

5. mapping 屬性設(shè)置analyzer 分詞器

默認(rèn)分詞器 standard , 它會把中文一個個拆開,肯定是不適合的,如果是索引中文的信息, 需要設(shè)置字段的分詞器

PUT blog_info
{
  "mappings": {
      "properties": {
        "blog_desc": {
          "type": "text",
          "analyzer": "ik_smart" //設(shè)置這個字段的分詞器 
        }
      }
    }
}

大部分分詞器是需要以es 中插件的方式 安裝的 ,后續(xù)會出一篇專門的 analyzer 分詞器

6. mapping 屬性設(shè)置 boost 權(quán)重

在es搜索的時候 會有一個相關(guān)性算分的過程 , 如果不設(shè)置 每個字段的默認(rèn)boost 權(quán)重為1.0 , 如果希望加大 按照廣告投放金額的分 那么可以設(shè)置boost 以提高搜索 自然就排在前面了

PUT blog_info
{
  "mappings": {
      "properties": {
        "put_amount": {
          "type": "text",
          "boost": "5" 
        }
      }
    }
}

7. mapping 屬性設(shè)置 copy_to

該屬性允許多個字段 copy 到指定的字段, 可以進(jìn)行搜索這個字段,但是_source 中是不顯示的

PUT peope
{
  "mappings": {
    "properties": {
      "first_name": {
        "type": "text",
        "copy_to": "full_name"
      },
      "last_name":{
        "type": "text",
        "copy_to": "full_name" // copy_to 指定字段
      },
      "full_name":{
        "type": "text"
      }
    }
  }
}
GET peope/_search?q=full_name:johnny  //使用 full_name 去搜索
//可以看到 并沒有 full_name 的返回 但是可以通過它去搜索
"_source" : {
   "first_name" : "johnny",
   "last_name" : "qiang"
}

8. mapping 屬性設(shè)置 index

通過給 屬性設(shè)置 index 來控制該 字段是否 參與 索引, 默認(rèn) true , 如果index 設(shè)置為false 那么 不能記錄索引 并且不可以搜索

PUT peope
{
  "mappings": {
    "properties": {
      "first_name": {
        "type": "text",
        "index": false //設(shè)置 index false
      },
      "last_name":{
        "type": "text"
      }
    }
  }
}
POST peope/_doc
{
  "first_name": "johnny is good name",
  "last_name": "qiang"
}

注意 url-search 搜不到但是不報(bào)錯, 而 requestbody 查詢 index false 的字段 會報(bào)錯

GET peope/_search?q=first_name:johnny //搜索不到數(shù)據(jù) 因?yàn)?
//"hits" : [ ] 
GET peope/_search?q=last_name:johnny // 可以看到由于 last_name 默認(rèn)index 了 所以可以搜索到
//    "hits" : [
//      {
//        "_index" : "peope",
//        "_type" : "_doc",
//        "_id" : "vobiMYQB4x9Wk60f2F21",
//        "_score" : 0.2876821,
//        "_source" : {
//          "first_name" : "johnny is good name",
//          "last_name" : "johnny is good name"
//        }
//      }
//    ]
GET peope/_search
{
  "query": {
    "match": {
      "first_name": "johnny"
    }
  }
}
// 拋錯400 Cannot search on field [first_name] since it is not indexed.

9. mapping 設(shè)置 屬性 null_value 默認(rèn)值

null_value:當(dāng)字段遇到null值時候的處理策略(字段為null時候是不能被搜索的,也就是說,text類型的字段不能使用該屬性,可以使用在keyword 字段上),設(shè)置該值后可以用你設(shè)置的值替換null值,這點(diǎn)可類比mysql中的"default"設(shè)置默認(rèn)值, 但是也有點(diǎn)不一樣, 后續(xù)就可以使用你設(shè)置的這個 null_value 去搜索, 但是檢索出來的數(shù)據(jù)_source 中 還是展示 null

PUT peope
{
  "mappings": {
    "properties": {
      "first_name": {
        "type": "keyword",
        "null_value": "default" // 設(shè)置當(dāng) 文檔的first_name 字段為null時候 轉(zhuǎn)成default 去創(chuàng)建倒排索引
      },
      "last_name":{
        "type": "text"
      }
    }
  }
}
POST peope/_doc
{
  "first_name": null, //設(shè)置null值
  "last_name": "johnny is good name",
  "full_name": "johnny is good name"
}
GET peope/_search?q=first_name:default //根據(jù) null_value 設(shè)置的值去搜索,查詢出來還是原來的null
// {
//        "_index" : "peope",
//        "_type" : "_doc",
//        "_id" : "xob-MYQB4x9Wk60fVF1_",
//        "_score" : 0.2876821,
//        "_source" : {
//          "first_name" : null,  
//          "last_name" : "johnny is good name",
//          "full_name" : "johnny is good name"
//        }
// }

10. mapping 設(shè)置 dynamic

dynamic 是否允許動態(tài)新增字段

  • true : 允許動態(tài)新增字段 同時mapping 被更新 文檔可被索引
  • false: 不允許動態(tài)新增字段 , mapping 不會被更新, 字段不能被索引, 但是數(shù)據(jù)可以入庫并且信息會出現(xiàn)在 _source 中
  • strict : 不允許寫入, 直接報(bào)錯

對于已經(jīng)存在的字段 一旦又?jǐn)?shù)據(jù)寫入,就不能進(jìn)行修改字段定義了,因?yàn)?底層Lucene不允許修改, 如果希望修改字段類型,必須 reindex 重建索引

10.1 dynamic false

PUT peope
{
  "mappings": {
    "dynamic": false, // 設(shè)置在索引上的 而不是對應(yīng)的字段上的 
    "properties": {
      "first_name": {
        "type": "text"
      },
      "last_name":{
        "type": "text"
      }
    }
  }
}
POST peope/_doc //dynamic false 可以入庫文檔數(shù)據(jù)
{
  "first_name": "johnny is good name",
  "last_name": "johnny is good name",
  "full_name": "johnny is good name"
}
GET peope/_search?q=full_name:johnny //嘗試通過 新增的字段去搜索
// "hits" : [ ]
GET peope/_search?q=first_name:johnny // 可以搜到數(shù)據(jù), 并且_source 中可以看到新增的字段
//
//    "hits" : [
//      {
//        "_index" : "peope",
//        "_type" : "_doc",
//        "_id" : "vobiMYQB4x9Wk60f2F21",
//        "_score" : 0.2876821,
//        "_source" : {
//          "first_name" : "johnny is good name",
//          "last_name" : "johnny is good name",
//          "full_name" : "johnny is good name" 
//        }
//      }
//    ]

10.2 dynamic strict

strict : 嚴(yán)格模式 , 不允許 動態(tài)新增字段的

PUT peope
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "first_name": {
        "type": "text"
      },
      "last_name":{
        "type": "text"
      }
    }
  }
}
POST peope/_doc //直接拋錯
{
  "first_name": "johnny is good name",
  "last_name": "johnny is good name",
  "full_name": "johnny is good name"
}
// 400 mapping set to strict, dynamic introduction of [full_name] within [_doc] is not allowed

總結(jié)

本篇非常詳細(xì)介紹了 Elasticsearch中 mapping , 介紹了mapping它是什么, 自動創(chuàng)建mapping的機(jī)制 , 自定義mapping 中各種參數(shù)設(shè)置. 一起來學(xué)習(xí)鞏固吧.

以上就是Elasticsearch mapping 概念及自動創(chuàng)建示例的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch mapping自動創(chuàng)建的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入了解SparkSQL中數(shù)據(jù)的加載與保存

    深入了解SparkSQL中數(shù)據(jù)的加載與保存

    這篇文章主要為大家詳細(xì)介紹了SparkSQL中數(shù)據(jù)的加載與保存的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-11-11
  • Java爬蟲范例之使用Htmlunit爬取學(xué)校教務(wù)網(wǎng)課程表信息

    Java爬蟲范例之使用Htmlunit爬取學(xué)校教務(wù)網(wǎng)課程表信息

    htmlunit 是一款開源的java 頁面分析工具,讀取頁面后,可以有效的使用htmlunit分析頁面上的內(nèi)容。項(xiàng)目可以模擬瀏覽器運(yùn)行,被譽(yù)為java瀏覽器的開源實(shí)現(xiàn)。今天我們用這款分析工具來爬取學(xué)校教務(wù)網(wǎng)課程表信息
    2021-11-11
  • Mybatis-Plus雪花id的使用以及解析機(jī)器ID和數(shù)據(jù)標(biāo)識ID實(shí)現(xiàn)

    Mybatis-Plus雪花id的使用以及解析機(jī)器ID和數(shù)據(jù)標(biāo)識ID實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis-Plus雪花id的使用以及解析機(jī)器ID和數(shù)據(jù)標(biāo)識ID實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Spring Boot 配置文件(application.yml、application-dev.yml、application-test.yml)

    Spring Boot 配置文件(application.yml、application-dev.y

    本文主要介紹了Spring Boot 配置文件,主要包含application.yml、application-dev.yml、application-test.yml,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java中靜態(tài)代理的使用與原理詳解

    Java中靜態(tài)代理的使用與原理詳解

    這篇文章主要介紹了Java中靜態(tài)代理的使用與原理詳解,代理模式是為一個對象提供一個替身,以控制對這個對象的訪問,即通過代理對象訪問目標(biāo)對象.這樣做的好處是:可以在目標(biāo)對象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作,即擴(kuò)展目標(biāo)對象的功能,需要的朋友可以參考下
    2023-09-09
  • servlet的url-pattern匹配規(guī)則詳細(xì)描述(小結(jié))

    servlet的url-pattern匹配規(guī)則詳細(xì)描述(小結(jié))

    在利用servlet或Filter進(jìn)行url請求的匹配時,很關(guān)鍵的一點(diǎn)就是匹配規(guī)則。這篇文章主要介紹了servlet的url-pattern匹配規(guī)則詳細(xì)描述(小結(jié)),非常具有實(shí)用價值,需要的朋友可以參考下
    2018-07-07
  • 淺談Spring自定義注解從入門到精通

    淺談Spring自定義注解從入門到精通

    這篇文章主要介紹了淺談Spring自定義注解從入門到精通,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 解決Spring中@Value注解取值為null問題

    解決Spring中@Value注解取值為null問題

    近期應(yīng)用中因業(yè)務(wù)迭代需要接入 user 客戶端,接入后總是啟動失敗,報(bào)注冊 user bean 依賴的配置屬性為 null,所以接下來小編就和大家一起排查分析這個問題,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • MyBatis-plus實(shí)現(xiàn)逆向生成器

    MyBatis-plus實(shí)現(xiàn)逆向生成器

    本文主要介紹了MyBatis-plus實(shí)現(xiàn)逆向生成器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java中的byte & 0xff到底有什么作用?

    Java中的byte & 0xff到底有什么作用?

    這篇文章主要介紹了Java中的byte & 0xff到底有什么作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

全南县| 丹巴县| 酉阳| 松潘县| 庆阳市| 蕲春县| 东港市| 高淳县| 枣庄市| 乌审旗| 绥棱县| 长宁区| 建平县| 汝州市| 巨野县| 桦甸市| 台中市| 湖南省| 汉川市| 西乌珠穆沁旗| 永吉县| 巩留县| 泾川县| 建始县| 大名县| 巴南区| 教育| 宁乡县| 渭源县| 华安县| 卢龙县| 五莲县| 灵寿县| 钦州市| 长春市| 永州市| 曲麻莱县| 泰安市| 轮台县| 开原市| 宜章县|