elasticsearch - 有没有办法在现有数据上启用 _source?
问题描述
我创建了一个没有 _source 字段的索引(考虑到内存)。我想在现有数据上启用此字段,有办法吗?
例如:
我将创建 dummy-index :
PUT /dummy-index?pretty
{
"mappings": {
"_doc": {
"_source": {
"enabled": false
}
}
}
}
我将添加下一个文档:
PUT /dummy-index/_doc/1?pretty
{
"name": "CoderIl"
}
当我在没有名称字段的情况下进行搜索时,我只会得到命中的元数据
{
"_index" : "dummy-index",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0
}
问题是否可以更改_soruce
为启用,当我再次搜索时,我会得到丢失的数据(在本例中为“名称”字段) -
{
"_index" : "dummy-index",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0
"_source" : {
"name" :CoderIl"
}
}
解决方案
来自同一个官方文档的字段控件上的存储选项
默认情况下,对字段值进行索引以使其可搜索,但不会存储它们。这意味着可以查询该字段,但无法检索原始字段值。
通常这无关紧要。字段值已经是默认存储的 _source 字段的一部分。如果您只想检索单个字段或几个字段的值,而不是整个 _source,则可以通过源过滤来实现。
正如文档中提到的,默认情况下它是禁用的,如果你想节省空间,你可以在特定的字段上启用它,并且需要重新索引数据
编辑: 索引选项控制(默认启用)字段是否被索引(这是在字段上搜索所必需的)和store
选项控制它是否被存储,如果你想获得非分析值,即使用什么您在索引请求中发送给 ES,该请求基于字段类型经过文本分析和部分index option
,请参阅此SO 问题以获取更多信息。
推荐阅读
- javascript - jquery加载函数不调用spring boot控制器来替换thymeleaf模板片段
- angular - 如何像我们在angular js中但在angular 5中一样包含html文件?
- javascript - 如何检查所有输入是否已正确填写,然后将其更改为绿色
- javascript - FullCalendar 尝试从 URL 而不是数组中获取事件
- javascript - Vuejs - 使用模板将父组件道具传递给子元素
- r - 在两个数据框中查找最接近的坐标匹配
- javascript - React - 加载外部脚本给我错误:无法在“文档”上执行“写入”
- postgresql - 如何授予用户对 Postgres 中所有新表的权限?
- java - 满足一定条件后自动在 JAVA swing 中配置框架
- vba - 粘贴的形状不被视为“最新”形状