Elasticsearch-数组和多字段

Posted enzodin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.
多字段和数组字段都允许在单一字段中拥有多个核心类型的值。

 

以上是关于Elasticsearch-数组和多字段的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch概念介绍及环境搭建

跨文档的Elasticsearch查询数组字段

如何在 Elasticsearch 中聚合数组字段的一个索引

Elasticsearch之插件扩展

Elasticsearch在后台启动

ElasticSearch