Elasticsearch建议在我的情况下禁用_source和_all字段,这是我的映射
{
"template": "mq-body-*",
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0,
"max_result_window": 100,
"codec": "best_compression"
},
"mappings": {
"_default_": {
"_source": {
"enabled": false
},
"_all": {
"enabled": false
}
},
"body": {
"properties": {
"body": {
"type": "string",
"doc_values": true,
"index": "not_analyzed"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这body.body是一个非常大的字段(20k-300k),我们不必索引和稀有获取,这是可能丢失的。但是之后
PUT /mq-body-local/body/1
{"body":"My body"}
Run Code Online (Sandbox Code Playgroud)
我无法通过GET /mq-body-local/body/1?fields=bodyor找到正文POST /mq-body-local/body/_search -d'{"fields":["body"]}',结果找到了一个但没有文档。我知道没有_source我不能做getor 的search,但是我怎样才能检索我的文档呢?
来自 Elasticsearch 的网站:
_source 字段包含在索引时传递的原始 JSON 文档正文。_source 字段本身没有索引(因此不可搜索),但它被存储以便在执行获取请求(如 get 或 search)时返回它
禁用源将阻止 Elasticsearch 在结果集中显示它。但是,过滤、查询和聚合不会受到影响。
因此,这两个查询不会生成任何实际结果:
GET mq-body-local/body/_search
GET mq-body-local/body/1
但是,您可以运行此聚合,其中将包含一些源,例如:
POST mq-body-local/body/_search
{
"aggs": {
"test": {
"terms": {
"field": "body"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
将产生这个结果集(我已经创建了一些测试记录):
"aggregations": {
"test": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "my body",
"doc_count": 1
},
{
"key": "my body2",
"doc_count": 1
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4188 次 |
| 最近记录: |