• 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.
    多字段和数组字段都允许在单一字段中拥有多个核心类型的值。

  • 相关阅读:
    python 操作 mysql 数据库 datetime 属性字段为 0000-00-00 00:00:00 的问题
    git 学习笔记
    SB Admin 2 学习笔记1
    docker容器与容器云读书笔记1
    urlencode遇到中文编码问题
    flask_sqlalchemy 乱码问题
    centos6u3 安装 celery 总结
    flask_sqlalchemy 命名遇到的一个小坑
    使用 bash 创建定时任务
    tornado 异步调用系统命令和非阻塞线程池
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/11100208.html
Copyright © 2020-2023  润新知