Elasticsearch是一个强大的全文搜索和分析引擎,它的分析器(analyzer)是其核心功能之一。分析器能够将文本数据进行处理,将其转换为可供搜索和分析的索引项。
什么是分析器?
在Elasticsearch中,分析器是一个将文本转换为索引项的处理流程。分析器执行以下三个主要步骤:
- 字符过滤器(Character filters):将原始文本中的字符进行转换或删除。例如,将HTML标签转换为文本、将句子中的数字转换为单词、删除多余的空格等。
- 分词器(Tokenizer):将字符流切割成单独的单词(Token)。例如,将一段文本切割成一个个单词,使其可以在搜索时被匹配到。
- 词语过滤器(Token filters):对切割后的单词进行修改或过滤。例如,将单词小写化、移除停用词(如“and”、“the”等),或应用同义词替换等。
在将文本索引到Elasticsearch之前,分析器会按照上述步骤对文本进行处理。这样,搜索时就可以匹配到与原始文本相关的单词,而不必考虑大小写、多余的空格、标点符号等。
分析器的配置
在Elasticsearch中,分析器可以在索引和搜索时被配置。可以通过以下两种方式定义分析器:
- 内置分析器(Built-in analyzers):Elasticsearch预先定义了一些内置的分析器。这些分析器包含了常见的字符过滤器、分词器和词语过滤器,可以被直接使用。
- 自定义分析器(Custom analyzers):用户也可以根据自己的需求,通过定义自定义字符过滤器、分词器和词语过滤器来创建自己的分析器。
以下是一个使用内置分析器的索引配置示例:
代码语言:javascript复制PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "standard"
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
在上述示例中,我们创建了一个名为“my_analyzer”的分析器,使用了内置的“standard”分析器类型。此外,我们将“my_analyzer”应用到了一个名为“title”的字段上。