我刚刚冒险进入看似简单但极其复杂的搜索世界。对于一个应用程序,我需要构建一个搜索机制来通过用户的名字搜索用户。
在阅读了许多帖子和文章后,包括:
如何使用 Lucene 进行个人姓名(名字、姓氏)搜索?
http://dublincore.org/documents/1998/02/03/name-representation/
通过优先考虑用户关系来搜索社交网络的最佳方式是什么?
http://www.gossamer-threads.com/lists/lucene/java-user/120417
Lucene 索引和查询设计问题 - 搜索人员
Lucene 模糊搜索客户名称和部分地址
...以及其他一些我目前找不到的。并且至少在我的机器上进行索引和基本搜索,我为用户搜索设计了以下方案:
1) 具有第一、第二和第三名称字段,并使用 Solr 对它们进行索引
2) 使用 edismax 作为多列搜索的 requestParser
3) 使用归一化过滤器的组合,例如:音译、拉丁语到 ascii 转换等
4 ) 最后使用模糊搜索
显然,我对此非常陌生,我不确定上述方法是否是最好的方法,并且希望听到有经验的用户在这个领域比我有更好的想法。
我需要能够通过以下方式匹配名称:
1) 重音折叠:Jorn 匹配 Jörn,反之亦然
2) 替代拼写:Karl 匹配 Carl,反之亦然
3) 缩短表示(我相信我使用 SynonymFilterFactory 这样做):Sue 匹配 Susanne 等
4) Levenstein 匹配:Jonn 匹配John 等
5) Soundex 匹配:Elin 和 Ellen
非常欢迎任何指导、批评或评论。请让我知道这是否可能……或者我只是在做白日梦。:)
编辑
我还必须补充一点,我还有一个全名字段,以防某些人的名字很长,例如其中一篇文章:Jon Paul 或 Del Carmen 也应该匹配 Jon Paul Del Carmen
由于这是一个新项目,我可以以任何我认为合适的方式修改架构和架构,因此限制非常有限。