Elasticsearch-數組和多字段


ES-數組和多字段

當需要在同一個字段中需要擁有多個值時,就會用到數組。

數組

如果要索引擁有多個值的字段,將這些值放入方括號中即可。
在music索引下的album類型中,添加songs字段,存儲專輯下的歌曲列表

FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT 'localhost:9200/music/album/1?pretty' -d '{

> "name":"八度空間",

> "date":"2002-07-18",

> "songs":["半獸人","回到過去","米蘭的小鐵匠","最后的戰役"]

> }'

{

  "_index" : "music",

  "_type" : "album",

  "_id" : "1",

  "_version" : 2,

  "_shards" : {

    "total" : 2,

    "successful" : 1,

    "failed" : 0

  },

  "created" : false

}

 

映射將songs字段定義為字符串性,和單個值同樣處理

FengZhendeMacBook-Pro:bin FengZhen$ curl 'localhost:9200/music/_mapping/album?pretty'
{
  "music" : {
    "mappings" : {
      "album" : {
        "properties" : {
          "date" : {
            "type" : "date",
            "format" : "strict_date_optional_time||epoch_millis"
          },
          "downloadable" : {
            "type" : "boolean"
          },
          "format_date" : {
            "type" : "date",
            "format" : "MMM DD YYYY"
          },
          "name" : {
            "type" : "string"
          },
          "singer" : {
            "type" : "string"
          },
          "songs" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

 

所有核心類型都支持數組,無需修改映射,既可以使用單一值,也可以使用數組。對於Lucene內部處理而言,這兩者基本是一致的,在同一個字段中索引或多或少的詞條,完全取決於提供了多少值。

多字段

多字段允許使用不同的設置,對同一項數據索引多次。如:上述例子中在專輯類型album中使用兩種不同的選項來配置songs字段:analyzed、針對每個單詞進行匹配,以及not_analyzed、針對完整歌曲名稱的精確匹配。
無需重新索引數據,就能將單字段升級到多字段。一旦子字段已經存在,就不能將其抹去。
設置字符串類型的多字段:一次是analyzed,一次是not_analyzed

curl -XPUT 'localhost:9200/music/_mapping/album?pretty' -d '{
    "album":{
        "properties":{
            "songs":{
                "type":"string",
                "index":"analyzed",
                "fields":{
                    "verbatim":{
                        "type":"string",
                        "index":"not_analyzed"
                    }
                }
            }
        }
    }
}'

默認的歌曲列表字段是analyzed,將提供的文本轉化為小寫,並切分為單詞。
第二個字段songs.verbatim是not_analyzed,將原有的標簽當做單一的詞條處理
要搜索analyzed版本的歌曲字段,就像搜索其它字符串一樣。如果要搜索not_analyzed版本的字段(僅僅精確匹配原有的歌曲),就要指定完整的路徑songs.verbatim.
多字段和數組字段都允許在單一字段中擁有多個核心類型的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM