
elasticsearch基础知识
在映射中定义一个用于聚合和排序的关键词字段。 将原文字段作为可搜索字段。 启用fielddata以支持内存构建。 POST:用于插入新文档。如果文档中未指定_id,Elasticsearch会自动生成一个唯一的_id。 PUT:用于更新现有文档或创建新文档(如果指定_id)。如果未指定_id,会返回错误。
发布日期:2021-05-07 04:26:41
浏览次数:27
分类:精选文章
本文共 2045 字,大约阅读时间需要 6 分钟。
Elasticsearch笔记:文本字段的处理与fielddata优化
索引(Index)与文档存储
在Elasticsearch中,一个文档被存储到一个叫做“索引”的地方。索引类似于传统数据库中的数据库,用于存储结构化文档。一个索引的复数形式是“indices”或“indexes”。需要注意的是,索引在Elasticsearch中有两种含义:
1. 索引(Index,名词)
索引是一个存储文档的集合,类似于关系型数据库中的数据库。每个索引可以包含多个文档,每个文档是一个JSON对象。
2. 索引(Index,动词)
将文档存储到索引中即为“索引”(index)。这类似于SQL中的INSERT操作。如果文档已存在,新文档会替换旧文档。
短语搜索(Phrase Match)
短语搜索用于精准匹配特定短语。例如,以下查询会匹配“about”字段为“rock climbing”的文档:
GET megacorp/employee/_search { "query": { "match_phrase": { "about": "rock climbing" } }}
fielddata与文本字段处理
1. fielddata的作用
fielddata用于在内存中构建查询时的数据结构,主要用于聚合、排序和脚本访问。默认情况下,Elasticsearch不支持fielddata,以减少内存占用和提升性能。
2. fielddata的限制
- fielddata会占用较多内存,特别是在处理大规模文本字段时。
- 一旦fielddata加载到内存中,会在段生命周期内保留。
- 加载fielddata会导致查询延迟。
3. 启用fielddata的场景
在以下情况下需要启用fielddata:
- 当你需要对文本字段进行聚合、排序或脚本访问时。
- 当你希望通过搜索新值或旧值来匹配文档时。
例如,以下查询会聚合“interests”字段:
GET megacorp/employee/_search { "aggs": { "all_int": { "terms": { "field": "interests" }, "aggs": { "avg_age": { "avg": { "field": "age" } } } } }}
4. fielddata的正确使用方法
PUT megacorp/_mapping/employee { "properties": { "interests": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } }}PUT megacorp/_mapping/employee { "properties": { "interests": { "type": "text", "fielddata": true } }}
PUT与POST的区别
在Elasticsearch中,PUT和POST有不同的用途:
示例:使用POST插入文档
POST website/blog { "title": "My third blog entry", "text": "Third still trying this out...", "date": "2017/07/05"}
示例:尝试使用PUT插入文档
PUT website/blog { "title": "My third blog entry", "text": "Third still trying this out...", "date": "2017/07/05"}
会返回错误提示:“No handler found for uri [/website/blog] and method [PUT]”。
总结
通过以上内容,我们了解了Elasticsearch中索引、短语搜索、fielddata的使用以及 PUT与POST的区别。理解这些概念是掌握Elasticsearch基础的关键。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月30日 13时34分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07
Explore Optimization
2019-03-07
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
2019-03-07
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
2019-03-07
解决数据库报ORA-02289:序列不存在错误
2019-03-07
map[]和map.at()取值之间的区别
2019-03-08
成功解决升级virtualenv报错问题
2019-03-08
【SQLI-Lab】靶场搭建
2019-03-08
【Bootstrap5】精细学习记录
2019-03-08
LeetCode197.打家劫舍
2019-03-08
A simple problem HDU-2522 【数学技巧】
2019-03-08
Struts2-从值栈获取list集合数据(三种方式)
2019-03-08
vscode中快速生成vue模板
2019-03-08
参考图像
2019-03-09