如何解决通过名字/姓氏进行智能搜索
| 我必须建立一个搜索功能,能够按成员的名字/姓氏搜索成员,并且可能是其他一些搜索参数(即地址)。 搜索应提供匹配候选者列表,以便用户可以选择他/她认为正确的匹配项。 搜索应足够聪明,以使“正确”的结果位于列表的前几项之内。搜索还应容忍拼写错误和拼写错误,并且甚至应注意姓名快捷键,例如Bob与Robert或Bill与William。 我开始调查Lucene及其家人(例如弹性搜索)作为工作的工具。尽管它具有一系列令人印象深刻的功能,可以解决全文搜索中的类似问题,但我不确定如何将其用于我的任务-到目前为止,Lucene根本不是正确的工具。 你们怎么看-如何利用Elastic Search解决我的问题?还是我应该去别的地方?解决方法
Lucene支持编辑距离查询,以便您的搜索查询可以忍受某些错字,您可以将其定义为术语允许的编辑距离。
例如:
name:johnni~0.8
会返回“约翰尼”
Solr还提供了许多现成的搜索过滤器和分析器,可用于搜索。
在您的情况下,我可能会将多个过滤器工厂链接在一起:
TrimFilterFactory-修剪查询
LowerCaseFilterFactory-消除大小写差异
ISOLatin1AccentFilterFactory-从字母中删除重音符号(大多数人无论如何都不使用该重音符号搜索)
PhoneticFilterFactory-用于匹配查询之类的声音:kris-> chris
查看链接下的文档,可以很直接地了解如何使用使用上述所有过滤器的分析器设置新的Solr实例。我使用类似的方法搜索城市名称,并且效果很好。
, Lucene可以容忍错别字和拼写错误,并且可以使用同义词。至于
搜索应足够聪明,以使“正确”的结果位于列表的前几项中
是否有不尝试这样做的搜索引擎?
, 就Bob / Robert而言,这可以使用同义词来完成,但是您需要从一些可靠的来源中获取同义词数据。
除了@Asaf提到的内容外,您还可以尝试使用N-gram索引处理拼写变体。有关如何执行此操作的示例,请参见CJKAnalyzer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。