match 和 term 查询是两种常用的查询方式,在用途和行为上有着显著的差异:
1. match 查询
全文搜索:match 查询用于全文搜索场景。它在查询之前对字段值和查询字符串进行分词(tokenization)处理。
分析器(Analyzer)应用:match 查询会应用字段指定的分析器(如果有的话)来处理查询字符串。这意味着它会处理文本数据的大小写、同义词、停用词等。
应用场景:适合用于文本字段,如文章内容、产品描述等。
示例:
GET /_search { "query": { "match": { "description": "quick brown fox" } } }
在这个例子中,如果description 字段包含了 “quick”、“brown”、“fox” 中的任何一个或全部词汇,文档就会被匹配。
2. term 查询
精确值匹配:term 查询用于精确值匹配。它不会对字段值或查询字符串进行分词处理。
不使用分析器:term 查询不会应用字段的分析器,它直接在倒排索引中查找准确的术语。
应用场景:适合用于关键字(keyword)、数字、日期等精确值字段。
示例:
GET /_search { "query": { "term": { "status": "active" } } }
在这个例子中,只有当status字段的值完全是 “active”(区分大小写)时,文档才会被匹配。
关键区别
- 分词处理:match 查询会对查询条件进行分词处理,而 term 查询不会。
- 用途:match 通常用于全文搜索,能处理文本中的同义词、变体等;而 term 用于精确匹配,如过滤、分类标签匹配。
- 灵活性:match 查询更适合处理人类语言中的复杂性和不确定性,而 term 查询更适合技术性和精确性较高的场景。
总结
了解这两种查询类型的区别,对于有效利用 Elasticsearch 进行数据检索至关重要。根据实际的数据特性和查询需求,选择适当的查询类型能显著提高搜索的准确性和效率。
标签:term,匹配,分析器,查询,ElasticSearch,分词,match From: https://www.cnblogs.com/beatle-go/p/18314272