搜索分析器
IBM® Cloudant® for IBM Cloud® Search 是内置在 Apache Lucene支持的 IBM Cloudant 数据库中的自由文本搜索技术。
创建 IBM Cloudant 搜索索引时,必须考虑需要对文档中的哪些字段建立索引,以及如何对这些字段建立索引。
建立索引过程的一个方面是选择分析器。 分析器是可以产生以下效果的代码:
- 通过确保字符串为小写,使搜索不区分大小写。
- 通过将句子分解为单个单词来记号化字符串。
- 通过除去特定于语言的单词结尾 (例如,农场主变为农场主) 来阻止这些单词。
- 通过忽略诸如 a,为或 if之类的词来除去停用词,这可使索引更小且更高效。
在建立索引时,将使用分析器逻辑排序来处理源数据,并将数据存储在索引中。 在查询时,将使用相同的分析器代码来处理搜索项,然后再查询索引。
测试分析器
如果要查看每个分析器的效果,请使用 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
更改为jose
,21a
更改为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
分析器。