Elasticsearch-如何控制存储和索引文档(_source、_all、返回源文档的某些字段)
Elasticsearch-如何控制存储和索引文档(_source、_all)
_source:可以在索引中存储文档。
_all:可以在单个字段上索引所有内容。
1. 存储原有内容的_source
_source字段按照原有格式来存储原有的文档。这一点可以看到匹配某个搜索的文档,而不仅仅是他们的ID。
_source字段的enabled可以设置为true或者false,来指定是否需要存储原始的文档。默认情况下是true,在很多情况下,设置为true还是非常有用的,因为_source的存在允许使用其他重要的ES特性。(由于很多功能都依赖于_source,而且从空间和性能的角度来看存储的成本相对低廉,在版本2.0中将无法再关闭_source选项。)
为了理解这个字段是如何工作的,来看下当检索某篇之前索引的文档时,ES通常返回什么:
(1) 先索引一篇文档
curl -XPUT 'localhost:9200/music/album/5?pretty' -d '{
"name":"七里香",
"date":"2004-08-03",
"songs":["七里香","搁浅"]
}'
(2) 检索
FengZhendeMacBook-Pro:cv FengZhen$ curl 'localhost:9200/music/album/5?pretty'
{
"_index" : "music",
"_type" : "album",
"_id" : "5",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "七里香",
"date" : "2004-08-03",
"songs" : [ "七里香", "搁浅" ]
}
}
搜索的同时,会获得_source的JSON,因为这是默认设置会返回的内容。
2. 仅仅返回源文档的某些字段
当检索或者搜索某篇文档的时候,可以要求ES只返回特定的字段,而不是整个_source.一种实现的方法是在fields参数中提供用逗号分隔的字段列表。如下
FengZhendeMacBook-Pro:cv FengZhen$ curl -XGET 'localhost:9200/music/album/5?pretty&fields=name'
{
"_index" : "music",
"_type" : "album",
"_id" : "5",
"_version" : 1,
"found" : true,
"fields" : {
"name" : [ "七里香" ]
}
}
如果_source已经被存储,ES从那里获取所需的字段。也可以通过设置store选项为yes来存储个别的字段。举个例子,如果只需要存储test_name字段,映射如下
curl -XPUT 'localhost:9200/music/_mapping/test' -d '{
"test":{
"properties":{
"test_name":{
"type":"string",
"store":"yes"
}
}
}
}'
向ES请求特定的字段时,这样做可能会很有帮助,原因是相对于检索整个_source然后再抽取而言,检索单一的存储字段要更快一些,尤其是在文档很大的时候。
注意:当存储单独的字段时,应该考虑到存储的越多,索引越大。更大的索引经常意味着更慢的索引和搜索速度。
就其内部来看,_source只是另一个Lucene中的存储字段。ES将原始的JSON存储于其中,然后按需抽取字段。
3. 索引一切的_all
_all是索引所有的信息。当搜索_all字段的时候,ES将在不考虑是哪个字段匹配成功的情况下,返回命中的文档。当用户不知道在哪里查询某些内容的时候,这一点非常有用。
从URI上运行搜索时如果不指定字段名称,系统默认情况下将会在_all上搜索:
curl 'localhost:9200/music/album/_search?pretty' -d '{
"query":{
"query_string":{
"query":"八度空间"
}
}
}'
如果总是在特定的字段上搜索,可以通过设置enabled为false来关闭_all:
"events":{
"_all":{"enabled":false}
}
如此设置会使得索引的规模变得更小,而且索引操作变得更快。
默认情况下,include_in_all隐式的设置为true,每个字段都会包含在_all之中。可以使用这个选项来控制哪些字段被_all包含,而哪些不被_all包含。
(1).将test_date字段设置为不在_all中
curl -XPUT 'localhost:9200/music/_mapping/test' -d '{
"test":{
"properties":{
"test_date":{
"type":"date",
"include_in_all":false
}
}
}
}'
(2).索引新文档
curl -XPUT 'localhost:9200/music/test/1?pretty' -d '{
"test_name":"八度空间",
"test_date":"2002-07-18",
"test_songs":["半兽人","回到过去","米兰的小铁匠","最后的战役"]
}'
(3).查询
FengZhendeMacBook-Pro:cv FengZhen$ curl 'localhost:9200/music/test/_search?q=2002-07-18&pretty'
{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"failed" :
},
"hits" : {
"total" : ,
"max_score" : null,
"hits" : [ ]
}
}
此时,不指定字段查询,已经查不出数据了
使用include_in_all的选项,将赋予更高的灵活性,灵活性不仅体现在空间存储上,同样体现在查询的表现方式上。如果一次搜索在没有指定字段的情形下运行,ES只会匹配_all所包含的字段。
Elasticsearch-如何控制存储和索引文档(_source、_all、返回源文档的某些字段)的更多相关文章
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)
MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ...
- ElasticSearch(六)底层索引控制
相似度算法 涉及到了ES的底层,首先讲一下ES的底层核心,相似度模型,ES的查询和传统的数据库查询最大的差别就在相似度查询(之前讲过,索引存储的最大差别就是讲非结构化数据转化为结构化),ES里面会给文 ...
- 一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)
欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...
- ElasticSearch之 控制相关度原理讲解
控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...
- [Elasticsearch] 分布式文件存储
本文翻译自Elasticsearch官方指南的distributed document store一章. 分布式文档存储 在上一章中,我们一直在介绍索引数据和获取数据的方法.可是我们省略了非常多关于数 ...
- Elasticsearch-基础介绍及索引原理分析(转载)
最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elastic ...
- Elasticsearch-基础介绍及索引原理分析
介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...
- elasticsearch简介和倒排序索引介绍
介绍 我们为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle.SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?确实,我们大部分的查 ...
随机推荐
- keras默认配置
使用keras后,会在用户目录下生成.keras/keras.json文件,Windows下为:C:\Users\user\.keras\keras.json,Linux下为:~/.keras/ker ...
- JVM(八),垃圾回收标记算法
八.垃圾回收标记算法 1.对象被判定成垃圾的标准 没有被其他对象引用 2.判断对象是否为垃圾的算法 (1)引用计数法 优点and缺点 (2)可达性分析算法
- Word:表格在页面中垂直居中
本文适用于Word 2007 + Windows 7,熊猫帮帮主@cnblogs 2018/2/22 如何让表格在页面上垂直居中呢.想当然的认为这属于表格的设置,在表格属性和其它表格相关选项中一通猛找 ...
- CentOS7 安装JumpServer
环境: CentOS Linux release 7.6.1810 (Core) JumpServer 1.4.8 Python 3.6.X MariaDB 编译安装Python3.6 首先,下载Py ...
- ASIHTTPRequest使用
http://qk13warcraft.blog.163.com/blog/static/157549344201271633014969/ 1.创建和运行请求 创建一个同步请求 这是最简单的用法,发 ...
- Linux 变量 $$ $! $? $- $# $* $@ $0 $n
[参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...
- Windows上配置Mask R-CNN及运行示例demo.ipynb
最近做项目需要用到Mask R-CNN,于是花了几天时间配置.简单跑通代码,踩了很多坑,写下来分享给大家. 首先贴上官方Mask R-CNN的Github地址:https://github.com/m ...
- javascript循环语句
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_汇总
第1节零基础快速入门SpringBoot2.0 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1.SpringBoot2.x课程介绍和高手系 ...
- 五十三:WTForms表单验证之常用验证器
Email:验证数据是否为邮箱EqualTo:验证此字段的数据是否和另一个字段的值相等,常用与校验密码和确认密码InputRequired:检验数据必传Length:校验数据长度NumberRange ...