模糊匹配及Solr关键词手动提示应用(2)
优采云 发布时间: 2020-08-25 16:44模糊匹配及Solr关键词手动提示应用(2)
一种Levenshtein的常见变形是Demerau-Levenshtein距离,这种估算方式引入了新的操作:调换相邻两个字符的位置,原本须要一个删掉和一次插入的操作降低到一次。Levenshtein的实现在Lucence中也有一个优化过的版本org.apache.lucence.search.spell.LevenshteinDistance。在拼写检测中,两个元音字母的替换比两个音节字母之间的替换更有可能发生,给予不同的权重是合理的。
1.3 n元组编辑距离
前面讨论到的方式都只涉及到单个字符,N元组编辑距离则容许使用多个字符进行比较。字符串开头的相似性常常会被特殊考虑。Lucence中N元组编辑距离的实现类为NgramDistance。
1.4 其他相似度测度方式
除了上述提及的集中估算方式外,还有好多方式用于估算字符串的相像。例如简单地使用最长字符串匹配,编辑距离的变型Damerau-Levenshtein,Q-Gram算法等。更多相似度算法可以参考这儿。
1.5 Java字符串相似度估算:
字符串相似度的估算在不同语言中有特别多的实现,在Java中也有好多现成的方案。Solr和Lucence中手动了一些相似度算法实现。下面两个库也针对好多算法提供了实现:
java string similarity
apache common common-text
2. 模糊匹配在Solr关键词提示的应用
搜索关键词提示或则建议几乎是搜索引擎的标配,除了降低用户输入外,能够引导用户到适宜的关键词上,提升用户体验。下面的事例中,我们在Solr中实现一个关键字手动提示的反例。
Solr中的EdgeNGramTokenFilter在构建索引的时侯,会依照配置将前缀也加入到索引中。例如taming这个词项在被索引时,ta、tam、tami等也会同时被索引。下面的Field类型申明展示了这些用法:
相应的Field配置如下:
配置完后,加入两个文档:doctor和document,使用下边的查询测试一下疗效:
:8983/solr/select?q=prefixxdo&fl=test
在实际的产品应用中,前端须要配置JS的按键风波来获取提示词,script.aculo.us是一个不错的库。更进一步,可以定做一个QueryResponseWriter返回后端须要的格式,例如返回li代码片断,自己订制的Writer须要在solrconfig中配置:
tahdismax prefixx^1.0
此时就可以通过下边订制的Handler来处理恳求:
:8983/solr/typeahead?q=tam
相关报导:
前两天项目中须要用到异步上传图片和显示上传进度的功能,于是找了好多外国的文章,翻山越岭地去遇上各类坑,这里写篇文章记录一下。HTML HTML代码没哪些好说, 更多
本函数是拿来判定对象object的属性(name表示)是否存在。如果属性(name表示)存在,则返回True,否则返回False。参数object是一个对象,参数name是一个属性的字符串表示。 例子: #hasattr()class Foo:def __init__(self):self.x = 123def test(x):self.x 更多