搜索是 Elasticsearch 的核心功能之一。本篇将介绍如何构建高效的查询、优化搜索结果,以及调整相关性评分,帮助你充分发挥 Elasticsearch 的搜索能力。
1. 基础查询
1.1 Match Query 与 Term Query 的区别
-
Match Query:用于全文搜索,会对查询词进行分词。
GET /my_index/_search {"query": {"match": {"title": "Elasticsearch 入门"}} }
- 匹配包含 “Elasticsearch” 或 “入门” 的文档。
- 适用于
text
类型字段。
-
Term Query:用于精确匹配,不分词。
GET /my_index/_search {"query": {"term": {"author.keyword": "text"}} }
- 仅匹配
author
精确为 “Text” 的文档。 - 适用于
keyword
类型字段。
- 仅匹配
1.2 多条件查询(Bool Query)
Bool Query
组合多个条件:
must
:必须满足(AND)。should
:至少满足一个(OR)。must_not
:必须不满足(NOT)。filter
:过滤,不影响评分。
示例:
GET /my_index/_search
{"query": {"bool": {"must": { "match": { "title": "Elasticsearch" } },"filter": { "term": { "author.keyword": "Text" } },"must_not": { "range": { "date": { "lte": "2025-01-01" } } }}}
}
Mermaid 图示 - Bool Query 逻辑