Elasticsearch权威指南:文档检索与搜索基础教程
引言
作为分布式搜索和分析引擎,Elasticsearch提供了强大的文档检索和搜索能力。本文将深入讲解Elasticsearch中的基本检索操作和搜索功能,帮助开发者快速掌握核心概念。
文档检索基础
单文档检索
在Elasticsearch中检索单个文档非常简单,只需要指定三个关键信息:
- 索引名称(index)
- 类型名称(type)
- 文档ID
使用GET请求可以轻松获取文档:
GET /megacorp/employee/1
响应结果包含文档元数据和原始JSON内容:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": ["sports", "music"]
}
}
关键点说明:
_source
字段包含文档原始内容- 元数据包含索引、类型、ID和版本信息
- 可以通过修改HTTP方法实现不同操作(GET/DELETE/HEAD/PUT)
搜索入门
简单搜索
使用_search
端点可以执行搜索操作,默认返回前10个匹配结果:
GET /megacorp/employee/_search
响应包含匹配文档数组和相关度评分:
{
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_score": 1,
"_source": {
"first_name": "Douglas",
"last_name": "Fir",
"age": 35,
"about": "I like to build cabinets",
"interests": ["forestry"]
}
},
...
]
}
}
查询字符串搜索
对于简单条件搜索,可以使用查询字符串语法:
GET /megacorp/employee/_search?q=last_name:Smith
这种轻量级搜索适合命令行快速查询,但功能有限。
查询DSL进阶
Elasticsearch提供了更强大的查询DSL(领域特定语言),使用JSON格式构建复杂查询。
基本匹配查询
GET /megacorp/employee/_search
{
"query": {
"match": {
"last_name": "Smith"
}
}
}
组合查询与过滤
结合bool查询和range过滤器可以实现复杂条件:
GET /megacorp/employee/_search
{
"query": {
"bool": {
"must": {
"match": { "last_name": "smith" }
},
"filter": {
"range": { "age": { "gt": 30 } }
}
}
}
}
查询结构解析:
must
:必须匹配的条件filter
:过滤条件(不参与评分)range
:范围查询(gt表示大于)
全文搜索实战
基础全文搜索
GET /megacorp/employee/_search
{
"query": {
"match": {
"about": "rock climbing"
}
}
}
Elasticsearch会根据相关性评分排序结果,考虑以下因素:
- 匹配词项的数量
- 词项在字段中出现的频率
- 字段长度等
短语匹配
精确匹配完整短语使用match_phrase
:
GET /megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}
搜索结果高亮
高亮功能可以帮助用户快速识别匹配内容:
GET /megacorp/employee/_search
{
"query": {
"match_phrase": {
"about": "rock climbing"
}
},
"highlight": {
"fields": {
"about": {}
}
}
}
响应中包含高亮片段:
{
"highlight": {
"about": [
"I love to go <em>rock</em> <em>climbing</em>"
]
}
}
总结
本文详细介绍了Elasticsearch中的文档检索和搜索功能,从基础的单文档获取到复杂的全文搜索和高亮显示。掌握这些核心功能是使用Elasticsearch的基础,后续可以进一步学习聚合分析、索引管理等高级特性。
关键要点:
- 使用GET方法检索文档
_search
端点执行搜索操作- 查询DSL提供强大的搜索能力
- 全文搜索基于相关性评分
- 高亮功能提升用户体验
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考