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-数组和多字段的更多相关文章

  1. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  2. PHP二位数组按照数组的某个字段值排序

    不多废话 直接代码 /** * @name 排序 按照数组的某个字段值排序 * @param $array 排序数组 $field 排序字段 $direction 排序顺序 * @author wan ...

  3. php二维数组根据某个字段去重

    php的二维数组根据某个字段去重,在这默认为二维数组的结构是一样的,现在根据二维数组里的id字段去重,把id相同的重复的元素去掉 /** * 二维数组根据某个字段去重 * @param array $ ...

  4. PHP二维数组按某个字段排序

    //准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...

  5. PHP 二维数组根据某个字段按指定排序方式排序

    /** * 二维数组根据某个字段按指定排序方式排序 * @param $arr array 二维数组 * @param $field string 指定字段 * @param int $sort_or ...

  6. extract_by_one 根据二维数组中某字段来提取数组信息,查看有无重复信息

    public function tt(){ $param = array( array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70 ...

  7. ElasticSearch Mapping中的字段类型

    1)string: 默认会被分词 2)数字类型主要如下几种: long:64位存储  integer:32位存储  short:16位存储  byte:8位存储  double:64位双精度存储  f ...

  8. php 二维数组按某字段排序

    思路很重要,最好的方法是查询时按这个字段给你排好,把问题丢给数据库,比如  order by age ,如果遇到中文时需要这样写(mysql) 如:select * from category ord ...

  9. 关于php利用数组中某个字段进行排序

    工作中用到了一个相关的问题,搜索了百度有好多种方法,但是不同方法对应的函数不同,试了几个发现还是下面这个比较好用: array_multisort($sortarray,SortRank,$sortl ...

  10. PHP 二维数组根据某个字段排序 复制代码 array_multisort

    //二维数组,按照里面的age从大到小降序,代码如下 <?php header('Content-Type:text/html;Charset=utf-8'); $arrUsers = arra ...

随机推荐

  1. [人物存档]【AI少女】【捏脸数据】1223今日份的推荐

    点击下载(城通网盘):AISChaF_20191112214754919.png 点击下载(城通网盘):AISChaF_20191111205924765.png

  2. jmeter常见问题小结

    1,报500,查看信息头中的Content-Type 2,https的端口号是443 3,同一个线程组中,不同请求分别用到的字段都可以直接写在‘HTTP信息头管理器’中 4,Debug Sampler ...

  3. [Python]token的生成及验证

    hmac模块(仅在python3中可以使用) 简介: HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出. 典型应用: HMAC的一 ...

  4. Nowcoder的JS计时器题分析

    题目描述 实现一个打点计时器,要求1.从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 12.返回的对象中需要包含一个 ...

  5. Reborn & Recover

    高考总算是结束了 而我们的旅程却还在继续 现在姑且是个ACMer(暂定) 而我已经将近一年没写代码了 接下来是全新的开始 全新的学校 全新的未来 总之从现在开始 试着努力看看吧!

  6. flask框架(三):flask配置文件

    flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_debug_flag(default=False), 是否开启Debug ...

  7. Vue使用Axios实现http请求以及解决跨域问题

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.Axios的中文文档以及github地址如下: 中文:https://www.kancloud.cn/y ...

  8. C++入门经典-例8.9-抽象类,纯虚函数,创建纯虚函数

    1:包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数.抽象类只能作为基类派生出的新的子类,而不能在程序中被实例化(即不能说明抽象类的对象),但是可以使用指向抽象类的指针.在程序开发过程中并 ...

  9. vmvare ubuntu虚拟机固定ip设置

    1.vmvare网络设置 2.window网络设置 3.ubuntu网络设置 先ifconfig 查看ip 已经设置为192.168.122.128 sudo vim /etc/network/int ...

  10. Python中函数的使用

    函数让代码的编写,阅读,测试和修改都变得更容易,提高代码的复用性,python中使用def关键字定义函数 如下代码在python3.7.3的Genay开发工具中编写测试通过. 一.简单函数定义及调用 ...