1. term查询
term
查询是一种精确匹配查询,它用于查找包含指定术语(term)的文档。它适用于keyword类型的字段,或者被映射为not_analyzed
的字段,这意味着字段的内容不会被分析成单词。term
查询不会对查询字符串进行分析,而是将查询字符串视为一个整体来匹配文档。
示例:
{
"query": {
"term": {
"username.keyword": "john"
}
}
}
- 上述查询将返回包含
username
字段的值为"john"的文档。
2. match查询
match
查询是一种全文搜索查询,它对查询字符串进行分析,并根据分析结果匹配文档。match
查询适用于text类型的字段,它会将查询字符串分析成单词,然后在文档中查找包含这些单词的文档。
示例:
{
"query": {
"match": {
"message": "quick brown fox"
}
}
}
- 上述查询将返回包含
message
字段的值中包含"quick"、"brown"和"fox"中任意一个或多个的文档。
区别总结
- 适用场景:
term
查询适用于精确匹配,主要用于keyword类型的字段。match
查询适用于全文搜索,主要用于text类型的字段。
- 分析行为:
term
查询不会对查询字符串进行分析,直接匹配整个查询字符串。match
查询会对查询字符串进行分析,然后使用分析结果来匹配文档。
- 匹配精度:
term
查询是精确匹配,只有在查询字符串完全匹配字段值时才会返回文档。match
查询是根据分析后的单词匹配,可以匹配字段值中包含查询单词的文档。
在使用ES进行文本搜索时,根据需求选择合适的查询类型非常重要。如果需要精确匹配或针对keyword类型的字段进行查询,可以使用term
查询;如果需要进行全文搜索或对text类型的字段进行查询,可以使用match
查询。