elasticsearch基础知识
发布日期: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的正确使用方法

  • 在映射中定义一个用于聚合和排序的关键词字段。
  • 将原文字段作为可搜索字段。
  • 启用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:用于插入新文档。如果文档中未指定_id,Elasticsearch会自动生成一个唯一的_id。
  • PUT:用于更新现有文档或创建新文档(如果指定_id)。如果未指定_id,会返回错误。
  • 示例:使用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基础的关键。

    上一篇:elasticsearch 【Basic Concept】基本概念
    下一篇:elasticsearch之x-pack破解

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月30日 13时34分30秒