分析和分析器

分析(analysis)是这样一个过程:

  1. 标记化一个文本块为适用于倒排索引单独的词(term)
  2. 标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”

这个过程由分析器完成,一个分析器包含:

  • 字符过滤器
    首先字符串经过字符串过滤器(character filter),用来在标记化前处理字符串,比如去除HTML标签或者转换“&”为“and”
  • 分词器
    分词器(tokenizer)根据内建的算法机制对字符串进行词切分,形成单独的词。
  • 标记过滤
    标记过滤(token filters)可以修改词(比如大小写转换)、去掉词(比如去掉停用词“the”“and”“a”)、增加词(比如同义词)

内建分析器

实例文本:"Set the shape to semi-transparent by calling set_trans(5)"

  • 标准分析器
    它根据Unicode Consortium的定义的单词边界(word boundaries)来切分文本,然后去掉大部分标点符号。最后,把所有词转为小写。
    set, the, shape, to, semi, transparent, by, calling, set_trans, 5
  • 简单分析器
    将非单个字母的文本切分,然后把每个词转为小写。
    set, the, shape, to, semi, transparent, by, calling, set, trans
  • 空格分析器
    依据空格切分文本。它不转换小写。
    Set, the, shape, to, semi-transparent, by, calling, set_trans(5)
  • 语言分析器
    特定语言分析器适用于很多语言。它们能够考虑到特定语言的特性。
    例如, english 分析器自带一套英语停用词库——像 and 或 the 这些与语义无关的通用词。这些词被移除后,因为语法规则的存在,英语单词的主体含义依旧能被理解。
    set, shape, semi, transpar, call, set_tran, 5
    注意 “transparent” 、 “calling” 和 “set_trans” 是如何转为词干的。

当我们索引(index)一个文档,全文字段会被分析为单独的词来创建倒排索引。不过,当我们在全文字段搜索(search)时,我们要让查询字符串经过同样的分析流程处理,以确保这些词在索引中存在。
全文查询我们将在稍后讨论,理解每个字段是如何定义的,这样才可以让它们做正确的事:
当你查询全文(full text)字段,查询将使用相同的分析器来分析查询字符串,以产生正确的词列表。
当你查询一个确切值(exact value)字段,查询将不分析查询字符串,但是你可以自己指定。