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-数组和多字段的更多相关文章
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- PHP二位数组按照数组的某个字段值排序
不多废话 直接代码 /** * @name 排序 按照数组的某个字段值排序 * @param $array 排序数组 $field 排序字段 $direction 排序顺序 * @author wan ...
- php二维数组根据某个字段去重
php的二维数组根据某个字段去重,在这默认为二维数组的结构是一样的,现在根据二维数组里的id字段去重,把id相同的重复的元素去掉 /** * 二维数组根据某个字段去重 * @param array $ ...
- PHP二维数组按某个字段排序
//准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...
- PHP 二维数组根据某个字段按指定排序方式排序
/** * 二维数组根据某个字段按指定排序方式排序 * @param $arr array 二维数组 * @param $field string 指定字段 * @param int $sort_or ...
- extract_by_one 根据二维数组中某字段来提取数组信息,查看有无重复信息
public function tt(){ $param = array( array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70 ...
- ElasticSearch Mapping中的字段类型
1)string: 默认会被分词 2)数字类型主要如下几种: long:64位存储 integer:32位存储 short:16位存储 byte:8位存储 double:64位双精度存储 f ...
- php 二维数组按某字段排序
思路很重要,最好的方法是查询时按这个字段给你排好,把问题丢给数据库,比如 order by age ,如果遇到中文时需要这样写(mysql) 如:select * from category ord ...
- 关于php利用数组中某个字段进行排序
工作中用到了一个相关的问题,搜索了百度有好多种方法,但是不同方法对应的函数不同,试了几个发现还是下面这个比较好用: array_multisort($sortarray,SortRank,$sortl ...
- PHP 二维数组根据某个字段排序 复制代码 array_multisort
//二维数组,按照里面的age从大到小降序,代码如下 <?php header('Content-Type:text/html;Charset=utf-8'); $arrUsers = arra ...
随机推荐
- nodejs(上)(获取请求参数)
Node.js是一个让JavaScript运行在服务器端的开发平台 参考文章 nodejs特点: 单线程 异步非阻塞i/o(异步相对节省资源,把那个等待的时间利用上了) 事件驱动 稳定性差(因为 ...
- jsp上传超大文件解决方案
1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...
- TTTTTTTTTTTTTT hdu 5763 Another Meaning 哈希+dp
Another Meaning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- CDOJ 1256 打表+数组 统计
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- 微信小程序mpvue项目使用WuxWeapp前端UI组件
前言:这是一篇简单粗暴的使用指南 在最近的小程序项目里前端UI框架最后选择使用WuxWeapp,这篇文章记录一下如何在小程序mpvue项目中使用该UI组件. 步骤一:下载源码 (地址在这里)主要是里面 ...
- vue 甘特图简单制作
甘特图(Gantt chart)又称为横道图.条状图(Bar chart).其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况.以提出者亨利·L·甘特(Henrry L ...
- PTA 笛卡尔树
笛卡尔树 (25 分) 笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2.首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大.其次所有结点的K2关键 ...
- Vue_(组件通讯)单项数据流
Vue单项数据流 传送门 单向数据流:父组件值的更新,会影响到子组件,反之则不行 修改子组件的值: 局部数据:在子组件中定义新的数据,将父组件传过来的值赋值给新定义的数据,之后操作这个新数据 如果对数 ...
- Java 注解指导手册(下)
9. 自定义注解 正如我们之前多次提及的,可以定义和实现自定义注解.本章我们即将探讨. 首先,定义一个注解: public @interface CustomAnnotationClass ...
- 【java多线程】多线程中的long和double
在看一些代码的时候,会发现在定义long型和double型的变量时,会在前面加上volatile关键字,当然也会看到在其它原子类型的变量前加上这个关键字,但这里要说的还是有区别的. 在java中,ja ...