在ES存储的文档,进行存储时,会对文档的内容进行分析和分词
分析的过程:
- 首先,将一块文本分成适合于倒排索引的独立的 词条 ,
- 之后,将这些词条统一化为标准格式以提高它们的“可搜索性”,或者 recall
分析器的三个功能
1.字符过滤器
首先,字符串按顺序通过每个 字符过滤器 。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将 &
转化成 `and`。
2.分词器
其次,字符串被 分词器 分为单个的词条。一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条。
3.Token过滤去器
最后,词条按顺序通过每个 token 过滤器 。这个过程可能会改变词条(例如,小写化 Quick
),删除词条(例如, 像 a`, `and`, `the
等无用词),或者增加词条(例如,像 jump
和 leap
这种同义词)
ES中有内置的分析器,也可以使用定制的分析器
标准分析器,简单分析器,空格分析器,语言分析器
测试分析器的分词过程
GET /_analyze { "analyzer": "standard", "text": "Text to analyze" }
运行结果为:
{ "tokens": [ { "token": "text", "start_offset": 0, "end_offset": 4, "type": "<ALPHANUM>", "position": 0 }, { "token": "to", "start_offset": 5, "end_offset": 7, "type": "<ALPHANUM>", "position": 1 }, { "token": "analyze", "start_offset": 8, "end_offset": 15, "type": "<ALPHANUM>", "position": 2 } ] }
token 为你实际存储的关键字
positition 指明词条在原始文本中的位置
start_offset /end_offset 字符在原始字符串中的位置