IBM Cloud Docs
搜索分析器

搜索分析器

IBM® Cloudant® for IBM Cloud® Search 是内置在 Apache Lucene支持的 IBM Cloudant 数据库中的自由文本搜索技术。

创建 IBM Cloudant 搜索索引时,必须考虑需要对文档中的哪些字段建立索引,以及如何对这些字段建立索引。

建立索引过程的一个方面是选择分析器。 分析器是可以产生以下效果的代码:

  • 通过确保字符串为小写,使搜索不区分大小写。
  • 通过将句子分解为单个单词来记号化字符串。
  • 通过除去特定于语言的单词结尾 (例如,农场主变为农场主) 来阻止这些单词。
  • 通过忽略诸如 aif之类的词来除去停用词,这可使索引更小且更高效。

在建立索引时,将使用分析器逻辑排序来处理源数据,并将数据存储在索引中。 在查询时,将使用相同的分析器代码来处理搜索项,然后再查询索引。

测试分析器

如果要查看每个分析器的效果,请使用 IBM Cloudant 搜索 API 调用,该调用适用于具有所提供字符串的某个内置 Lucene 分析器。

要依次查看每个分析器,可以将以下字符串传递到每个分析器以测量效果:

"My name is Chris Wright-Smith. I live at 21a Front Street, Durham, UK - my email is chris7767@aol.com."

标准分析器

standard 分析器通过以下方式更改字符串:

  • 除去标点。
  • 根据空格和标点符号拆分词。
  • 除去停用词,包括 "is" 和 "at"。
  • 将单词更改为使用小写字母。
  • 请注意 "aol.com" 如何保持完整。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767","aol.com"]}

关键字分析器

使用 keyword 分析器,字符串保持不变。 请参阅以下示例:

{"tokens":["My name is José Wright-Smith. I live at 21a Front Street, Durham, UK - my email is jose7767@aol.com."]}

简单分析器

simple 分析器通过以下方式更改字符串:

  • 除去标点。
  • 根据空格和标点符号拆分词。
  • 未除去任何停用词 (通知 "is" 和 "at")。
  • 将单词更改为使用小写字母。
  • 请注意,jose7767 更改为 jose21a 更改为 a
{"tokens":["my","name","is","josé","wright","smith","i","live","at","a","front","street","durham","uk","my","email","is","jose","aol","com"]}

简单的ASCII折叠分析器

simple_asciifolding 分析器通过以下方式更改字符串:

  • 除去标点。
  • 根据空格和标点符号拆分词。
  • 未除去任何停用词 (通知 "is" 和 "at")。
  • 将单词更改为使用小写字母。
  • 将非ASCII字符转换为最接近的ASCII等效字符。
  • 例如,José 变为 jose
{"tokens":["my","name","is","jose","wright","smith","i","live","at","a","front","street","durham","uk","my","email","is","jose","aol","com"]}

空白分析器

whitespace 分析器通过以下方式更改字符串:

  • 除去一些标点符号。
  • 在空间上拆分词。
  • 未除去任何停用词 (通知 "is" 和 "at")。
  • 单词保持区分大小写。
  • 请注意电子邮件如何保持完整。
{"tokens":["My","name","is","José","Wright-Smith.","I","live","at","21a","Front","Street,","Durham,","UK","-","my","email","is","jose7767@aol.com."]}

经典分析器

classic 分析器通过以下方式更改字符串:

  • 除去标点。
  • 根据空格和标点符号拆分词。
  • 除去停用词 (no "is" 或 "at")。
  • 将单词更改为使用小写字母。
  • 请注意电子邮件如何保持完整。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767@aol.com"]}

英语分析器

english 分析器通过以下方式更改字符串:

  • 除去标点。
  • 根据空格和标点符号拆分词。
  • 使用 Porter Stemming 算法 提取词干(例如,fishing 变成 fish)。
  • 除去停用词 (no "is" 或 "at")。
  • 将单词更改为使用小写字母。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767","aol.com"]}

特定于语言的分析器对源数据进行最多的更改。 请参阅以下两个使用 english 分析器的示例:

The quick brown fox jumped over the lazy dog.
{"tokens":["quick","brown","fox","jump","over","lazi","dog"]}

Four score and seven years ago our fathers brought forth, on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.
{"tokens":["four","score","seven","year","ago","our","father","brought","forth","contin","new","nation","conceiv","liberti","dedic","proposit","all","men","creat","equal"]}

我必须选择哪个分析器?

这取决于您的数据。 如果您的数据是在单独的字段中结构化的 (电子邮件地址,邮政编码,姓名等),请选择一个分析器来保留您需要搜索的数据。

仅对需要的字段建立索引。 保持索引小有助于提高性能。

请考虑常用数据源,并查看最佳分析器选项。

名称

名称字段可能必须使用不包含词的分析器。 whitespace 分析器保持单词的大小写(即搜索词必须完整,大小写敏感匹配),并保留双名。 如果您想拆分双杠名字,那么 standard 分析器可以帮您完成这项工作。

电子邮件地址

内置的 email 分析器可以完成这一任务,它将所有内容都转换为小写,然后像关键词分析器一样工作。

唯一标识

订单号、付款参考和UUID(如 "A1324S", "PayPal0000445", 和 " ABC-1412-BBG ")必须保持原样,因此推荐使用 keyword 分析器。

国家或地区代码

国家代码(如“UK”)也必须使用 keyword 分析器,以防止删除与国家代码匹配的“停用词”,例如印度的“IN”。 keyword 分析器区分大小写。

文本

最好使用特定语言的文本分析器来处理一段自由格式的文本,例如 english 分析器,或者更一般的情况,standard 分析器。