Elasticsearch 的 Term、Match 和 Keyword 检索类型有什么区别?
Elasticsearch 的 Term、Match 和 Keyword 检索类型有什么区别?
回答重点
Term、Match 和 Keyword 是 Elasticsearch 中非常常用的检索类型,这三者的区别主要在于它们处理查询和数据的方式。
1)Term 查询:Term 查询不会解析查询字符串,而是直接将查询值用于查询。因此,它适用于精确匹配。例如,搜索状态码为 “200” 的文档。
2)Match 查询:Match 查询会将查询字符串进行分词和分析,然后查找与分词后的每个词匹配的文档。因此,它适用于全文搜索。例如,搜索标题包含 “quick brown fox” 的文档。
3)Keyword:Keyword 是一种数据类型,而不是查询类型。它用于存储不会被分词的文本字段,适用于精确匹配和聚合分析。
扩展知识
1)Term 查询:
- 数据类型:适用于 Keyword 类型字段,数字字段和日期字段。
- 分析流程:不进行分词和分析,直接以输入值为准进行查询。
- 使用场景:适用于需要精确匹配的情况,例如状态码、ID、布尔值等场景。
示例代码:
1 | { |
2)Match 查询:
- 数据类型:适用于 Text 类型字段。
- 分析流程:会对查询字符串进行分词和分析。通常情况下,它使用分词器(analyzer)来将查询字符串分成更小的词条。
- 使用场景:适用于全文搜索,例如搜索某篇文章的内容、标题或摘要。
示例代码:
1 | { |
3)Keyword 数据类型:
- 数据类型:适用于需要精确匹配的字段。它不会对字段的值进行分词,适合用于 tag、email、URL、身份证号等场景。
- 分析流程:存储时保持原样,不进行分词。
- 使用场景:适用于需要精确匹配的字段,聚合分析和排序操作。
示例模板:
1 | { |
Comments