常见问题解答 FAQ
以下是用户常问的一些问题及其解答。
关键字搜索
什么是前缀搜索?
前缀搜索是指当您输入一个部分单词时,系统会返回所有以此部分单词开头的完整单词。假设数据集中有单词 example,而用户搜索 exa(前 3 个字符),在前缀搜索模式(prefix=true 搜索参数)下,仍会返回单词 example。
以下是一些在前缀搜索中将返回单词 example 作为匹配命中项的搜索示例:
eexexaexamexampexamplexample
前缀搜索特别适用于即输入即搜索体验,在用户输入部分单词时,立即显示结果,而不需要输入完整单词。
kumosearch 中默认启用前缀搜索。如果禁用前缀搜索(通过设置 prefix=false 作为搜索参数),那么只有完全输入 example 作为搜索关键字时才会返回结果,上述的所有其他子字符串都不会返回结果。
什么是中缀搜索?
中缀搜索允许在字符串中间进行匹配。仍然假设数据集中有单词 example,而用户搜索 xa(出现在字符串中间),默认情况下 kumosearch 不会返回它,因为默认仅启用了 前缀搜索。
要启用中缀搜索,必须在每个字段的索引表schema中显式启用它。可以在字段定义中添加infix: true 参数,
并在搜索时使用infix搜索参数。
中缀搜索是 CPU 密集型的,并且需要额外的内存。对于高流量用例,请务必对集群进行基准测试,以确保在启用此功能之前有足够的 CPU 容量。
如果单词中有 特殊字符,更有效的替代方法是在索引表schema中使用 token_separators,使 kumosearch 将单词索引为单独的标记,因此可以搜索每个 token,而无需进行中缀搜索。
如何处理特殊字符?
默认情况下,kumosearch 在索引之前删除所有特殊字符。可以使用 token_separators 和 symbols_to_index 参数来控制此行为。
此处 有一篇详细的文章,介绍了在搜索不同类型的数据时如何使用这两个参数。