Elasticsearch 的 Term、Match 和 Keyword 检索类型有什么区别?

Sherwin.Wei Lv8

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
3
4
5
6
7
{
"query": {
"term": {
"status": "200"
}
}
}

2)Match 查询

  • 数据类型:适用于 Text 类型字段。
  • 分析流程:会对查询字符串进行分词和分析。通常情况下,它使用分词器(analyzer)来将查询字符串分成更小的词条。
  • 使用场景:适用于全文搜索,例如搜索某篇文章的内容、标题或摘要。

示例代码:

1
2
3
4
5
6
7
{
"query": {
"match": {
"title": "quick brown fox"
}
}
}

3)Keyword 数据类型

  • 数据类型:适用于需要精确匹配的字段。它不会对字段的值进行分词,适合用于 tag、email、URL、身份证号等场景。
  • 分析流程:存储时保持原样,不进行分词。
  • 使用场景:适用于需要精确匹配的字段,聚合分析和排序操作。

示例模板:

1
2
3
4
5
6
7
8
9
{
"mappings": {
"properties": {
"email": {
"type": "keyword"
}
}
}
}

Comments
On this page
Elasticsearch 的 Term、Match 和 Keyword 检索类型有什么区别?