我们在.net 上使用 lucene,我们需要一种方法来实现“与排序规则无关”的搜索我不知道这是否是正确的术语,但我们需要的是如果我有一个名为 [Žuf] 的用户我想可以通过 etering [zuf] 找到他,如果用户名是 [zuf] 并且我输入 [Žuf],也可以在其他方向找到他这个,但我更喜欢更聪明的东西
有什么想法吗?
谢谢阿尔米尔
我们在.net 上使用 lucene,我们需要一种方法来实现“与排序规则无关”的搜索我不知道这是否是正确的术语,但我们需要的是如果我有一个名为 [Žuf] 的用户我想可以通过 etering [zuf] 找到他,如果用户名是 [zuf] 并且我输入 [Žuf],也可以在其他方向找到他这个,但我更喜欢更聪明的东西
有什么想法吗?
谢谢阿尔米尔
Lucene for Java 包含一个过滤器来完成这项工作:ICUFoldingFilter (http://lucene.apache.org/core/3_6_1/api/all/org/apache/lucene/analysis/icu/ICUFoldingFilter.html),在 maven 包中lucene-icu(至少在 3.6.1 版本中)。我不知道 Lucene.net 是否存在这样的库,但是,由于它基于 ICU,您应该能够在 .NET 中重写代码。
ICUFoldingFilter 是什么:
将搜索词折叠应用于 Unicode 文本的 TokenFilter,应用来自 UTR#30 字符折叠的折叠。
此过滤器将报告中的以下折叠应用于 unicode 文本:
- Accent removal - Case folding - Canonical duplicates folding - Dashes folding - Diacritic removal (including stroke, hook, descender) - Greek letterforms folding - Han Radical folding - Hebrew Alternates folding - Jamo folding - Letterforms folding - Math symbol folding - Multigraph Expansions: All - Native digit folding - No-break folding - Overline folding - Positional forms folding - Small forms folding - Space folding - Spacing Accents folding - Subscript folding - Superscript folding - Suzhou Numeral folding - Symbol folding - Underline folding - Vertical forms folding - Width folding
此外,删除了默认可忽略项,并将文本规范化为 NFKC。所有折叠、大小写折叠和归一化映射都是递归应用的,以确保完全折叠和归一化的结果。
看看ASCIIFoldingFilter,结合LowerCaseFilter它应该可以满足您的需求。