模糊匹配及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 更多

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线