模糊搜索用于搜索贴近词语的文本,而不是完全匹配词语的文本。模糊搜索可以帮助您在搜索词拼写错误的情况下找到相关结果。
要执行模糊搜索,请在搜索词结尾处附加代字号 (~)。例如,搜索词 bank~ 将返回包含 tank、benk 或 banks 的行。
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”与各个索引词语之间生成的相似度。
搜索词 | 搜索词长度 | 词语 | 词语长度 | 编辑距离 | 相似度 |
---|---|---|---|---|---|
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~')
此查询返回包含以下词语的行:tone、ton、tune 和 tones。不会包括带有词语 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 索引。