模糊搜索

模糊搜索用于搜索贴近词语的文本,而不是完全匹配词语的文本。模糊搜索可以帮助您在搜索词拼写错误的情况下找到相关结果。

要执行模糊搜索,请在搜索词结尾处附加代字号 (~)。例如,搜索词 bank~ 将返回包含 tankbenkbanks 的行。

bts_contains(column, 'bank~')

在模糊搜索中,可以在代字号后面使用可选参数来指定相似度。值可以介于 0 和 1 之间,值越接近 1,要求的相似度越高。相似度的缺省等级为 0.5,表示相似度等级大于 0.5 的词语将包含在搜索中。

使用以下公式确定搜索词与索引中词语之间的相似度等级:

similarity = 1 - (edit_distance / min ( len(term), len(word) ) )

搜索词与索引词语之间的编辑距离将使用 Levenshtein Distance 或 Edit Distance 算法进行计算。min() 函数返回 len() 函数的两个值中的最小值,而 len() 函数返回搜索词与索引词语的长度。下表显示用于计算相似度的值以及搜索词“tone”与各个索引词语之间生成的相似度。

表 1. 样本比较集
搜索词 搜索词长度 词语 词语长度 编辑距离 相似度
tone 4 tone 4 0 1.00
tone 4 ton 3 1 0.67
tone 4 tune 4 1 0.75
tone 4 tones 4 1 0.75
tone 4 once 4 2 0.50
tone 4 tan 3 2 0.33
tone 4 two 3 3 0.00
tone 4 terrible 8 6 -0.50
tone 4 fundamental 11 9 -1.25

例如,以下查询将搜索与搜索词 tone 的缺省相似度等级大于 0.50 的词语:

bts_contains(text, 'tone~')

此查询返回包含以下词语的行:tonetontunetones。不会包括带有词语 once 的行,因为 once 的相似度等级正好是 0.50,而不是大于 0.50。以下查询将包括带有词语 once 的行:

bts_contains(text, 'tone~0.49')
提示: 请先使用数据测试指定相似度的行为,确定可靠之后再在应用程序中加以运用。

如果与模糊查询匹配的索引标记数超过 1024,那么将会收到以下错误:

(BTSB0) - bts clucene error: Too Many Clauses

要解决此问题,您可以进一步限制查询,或者将 max_clause_count 索引参数设置为大于 1024 的数字并重新创建 bts 索引。