解析过程:
- 将一段文本拆分成一个个单词并将单词应用在倒排索引中
- 然后将这些单词进行标准化(如将所有字母转成小写)来提供可查性
解析器组成:
解析器实际是一个包装对象,其包含如下三个功能:
- character filters 文本过滤器。首先, 一段文本将按序传递给任意个的文本过滤器,它的工作就是在对文本进行分割之前进行调整,如将文本中的html元素删除等
- Tokenizer 分词器。将文本分割成一个个的单词
- Token filters 单词过滤器。最后,将分割后的单词按序传递给任意个的单词过滤器,通过各种类型的单词过滤器进单词进行调整(转成小写字母)、删除(删除一些定语,如a、an、the)、添加一些同义词关联等
ES内建的解析器
如以下一段文本:Set the shape to semi-transparent by calling set_trans(5),通过以下各解析器解析后的结果
- Standard analyzer 标准解析器。这是ES默认的解析器,它根据单词边界进行分割,去除符号,最后将字母转成小写。如上文本解析后为:set, the, shape, to, semi, transparent, by, calling, set_trans, 5
- Simple analyzer 简单解析器。不是字母的都将删除,最后将字母转成小写。如上文本解析后为: set, the, shape, to, semi, transparent, by, calling, set, trans
- Whitespace analyzer 空格解析器。顾名思义,完全按照空格进行分割,也不对字母转换大小写。如上文本解析后为:Set, the, shape, to, semi-transparent, by, calling, set_trans(5)
- Language analyzer 语言解析器。目前支持不少的语言解析器(无汉语),在此可查到https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html。根据每种语言的特点进行分割。用english解析器后,以上文本将会解析成:set, shape, semi, transpar, call, set_tran, 5
测试解析器
GET /_analyze { "analyzer": "standard", "text": "Text to analyze"}