查询类型概述
Elasticsearch 提供了多种查询方式,包括 match、term 和 range 查询,适用于不同的场景。以下是它们的详细说明和用法。
match 查询(模糊匹配)
match 查询是一种全文搜索查询,会对查询文本进行分词处理,适用于文本字段的分析搜索。它支持模糊匹配和相关性评分。
{
"query": {
"match": {
"field_name": "search text"
}
}
}
- 适用于
text类型的字段,会经过分词器处理。 - 支持模糊匹配,可以通过
fuzziness参数调整容错级别。 - 默认使用 OR 逻辑,可以通过
operator参数改为 AND。
term 查询(精准匹配)
term 查询用于精确匹配,不会对查询值进行分词处理,适用于 keyword 类型或未分析的字段。
{
"query": {
"term": {
"field_name": {
"value": "exact_value"
}
}
}
}
- 适用于精确匹配,如枚举值、ID 或
keyword类型的字段。 - 不会进行分词,直接匹配字段的原始值。
- 可以结合
terms查询实现多值匹配。
range 查询(精准匹配)
range 查询用于范围匹配,支持数值、日期等可比较的字段类型。
{
"query": {
"range": {
"field_name": {
"gte": 10,
"lte": 20
}
}
}
}
- 支持的操作符:
gt:大于gte:大于等于lt:小于lte:小于等于
- 适用于日期、数值等范围筛选。
组合查询示例
可以结合 bool 查询将多种条件组合使用:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "elasticsearch" } },
{ "term": { "status": "published" } },
{ "range": { "date": { "gte": "2023-01-01" } } }
]
}
}
}
must:所有条件必须满足(AND 逻辑)。should:只有should查询时,至少满足一个条件(OR 逻辑)。如果should与must一块使用,满不满足should条件都可以。满足should条件的数据得发高,排序靠前。must_not:排除符合条件的文档。
性能优化建议
- 对精确匹配字段使用
keyword类型,并结合term查询。 - 对需要全文搜索的字段使用
text类型,并结合match查询。 - 使用
range查询时,对数值或日期字段添加索引优化。
2591

被折叠的 条评论
为什么被折叠?



