[英]How to index a field in elasticsearch but not store it in _source?
[英]How to store data in elasticsearch _source but not index it?
我仅按几个字段进行搜索,但我希望能够将整个文档存储在 ES 中,以免进行额外的 DB (MySQL) 查询。
我尝试将index: no
, store: no
添加到映射中的整个对象/属性,但我仍然不确定这些字段是否被索引并增加了不必要的开销。
假设我有书,每本书都有作者。 我只想按书名搜索,但我希望能够检索整个文档。
这个可以吗:
mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
index: no
store: no
properties:
first_name:
type: string
last_name:
type: string
或者我应该这样做:
mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
properties:
first_name:
index: no
store: no
type: string
last_name:
index: no
store: no
type: string
或者也许我做的完全错了? 那么不应该被索引的nested
属性呢?
默认情况_source
,无论您选择索引的字段如何,都会存储文档的_source
。 _source
用于在搜索结果中返回文档,而索引的字段用于搜索。
您无法在对象上设置index: no
以防止对象中的所有字段都被编入索引,但您可以使用path_match
属性对动态模板执行 path_match
以应用index: no
对象中的每个字段进行设置。 这是一个简单的例子。
使用映射创建索引,该映射包括author
对象和嵌套categories
对象的动态模板:
POST /shop
{
"mappings": {
"book": {
"dynamic_templates": [
{
"author_object_template": {
"path_match": "author.*",
"mapping": {
"index": "no"
}
}
},
{
"categories_object_template": {
"path_match": "categories.*",
"mapping": {
"index": "no"
}
}
}
],
"properties": {
"categories": {
"type": "nested"
}
}
}
}
}
索引文档:
POST /shop/book/1
{
"title": "book one",
"author": {
"first_name": "jon",
"last_name": "doe"
},
"categories": [
{
"cat_id": 1,
"cat_name": "category one"
},
{
"cat_id": 2,
"cat_name": "category two"
}
]
}
如果您在title
字段中搜索了搜索字词book
,则会返回该文档。 如果搜索author.first_name
或author.last_name
,则不会匹配,因为此字段未编入索引:
POST /shop/book/_search
{
"query": {
"match": {
"author.first_name": "jon"
}
}
}
类别字段的嵌套查询也是如此:
POST /shop/book/_search
{
"query": {
"nested": {
"path": "categories",
"query": {
"match": {
"categories.cat_name": "category"
}
}
}
}
}
此外,您可以使用Luke工具来期望Lucene索引并查看已编制索引的字段。
您可以简单地在映射定义中设置"enabled": false 。
启用的设置只能应用于顶级映射定义和 object 字段,导致 Elasticsearch 完全跳过对字段内容的解析。 JSON 仍然可以从
_source
字段中检索到,但不可搜索或以任何其他方式存储。
"mappings": {
"properties": {
"title": { "type": "text" },
"author": { "type": "object", "enabled": false }
}
}
但请注意, enabled
不适用于核心类型,但是可以通过设置"index": false来将index
选项应用于核心类型。
索引选项控制字段值是否被索引。 它接受 true 或 false 并默认为 true。 未索引的字段不可查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.