是否有一个 Lucene 分析器可以用它们的短名称等价物(例如 Mike 和 Michael、Rich 和 Richard、Suzie 和 Susan)等来标记名称部分?
Levenshtein 距离的模糊匹配是我知道的一个解决方案,一些实现者似乎将模糊匹配与 soundex 算法配对。肯定有人轻描淡写地在某处简单地列出所有这些短名称?
编辑:这个问题最难的部分是从哪里获取同义词数据?
是否有一个 Lucene 分析器可以用它们的短名称等价物(例如 Mike 和 Michael、Rich 和 Richard、Suzie 和 Susan)等来标记名称部分?
Levenshtein 距离的模糊匹配是我知道的一个解决方案,一些实现者似乎将模糊匹配与 soundex 算法配对。肯定有人轻描淡写地在某处简单地列出所有这些短名称?
编辑:这个问题最难的部分是从哪里获取同义词数据?
我不知道那里有任何特定的昵称过滤器。
但是,如果您有数据源, SynonymFilter将使其相当容易生成。这似乎是昵称数据的一个很好的来源:
https://code.google.com/p/nickname-and-diminutive-names-lookup/
您需要生成SynonymMap
传递给 ctor 的SynonymFilter
ctor,它应该看起来像这样(我认为):
SynonymMap.Builder builder = new SynonymMap.Builder(true);
builder.add(new CharsRef("Mike"), new CharsRef("Michael"), false);
builder.add(new CharsRef("Rich"), new CharsRef("Richard"), false);
builder.add(new CharsRef("Suzie"), new CharsRef("Susan"), false);
SynonymMap map = builder.build();