我正在寻找一个表或启发式库,它可以将扩展字符转换为常规ascii o,如上面带帽子的o。
我希望这样做是为了搜索索引目的,因为大多数人都不打算用帽子输入o。
例如,我在搜索中键入“Cote”,但我希望我的搜索包含“Côte”之类的内容。
Solr似乎没有转换这些。
我尝试了java.text.Normalizer和朋友但是没有用。确实有效,请参阅下面的解决方案。
答案 0 :(得分:3)
您希望在Solr中执行索引和查询分析时使用ASCIIFoldingFilterFactory。如果你想要这个独立的,你可以抓住源代码并做任何事情。
答案 1 :(得分:0)
我做了一些快速的谷歌搜索,并没有提出任何可用于字符翻译的库。我可能会遗漏一些东西。
我确实找到了所有工厂类的solr javadoc:
http://lucene.apache.org/solr/api/org/apache/solr/analysis/package-summary.html
我确定你已经看过上面的内容,但也许你可以使用它。
我个人建议您必须编写过滤器。我不相信会很容易。如果你只接受unicode,事情会更容易,但如果你使用的是webapp,那么你必须关注从用户的浏览器进来的字符集,然后将该字符集转换为unicode。
祝你好运。
答案 2 :(得分:0)
这似乎有效:
import java.text.Normalizer;
Normalizer.normalize("ô", Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]","");
答案 3 :(得分:0)
你有正确的总体思路,但错误的具体方法。
请注意,在许多欧洲语言中,删除重音是一个非常糟糕的主意。人们输入它们是有原因的。非常不同的单词只有重点不同。 '爸爸'和'爸爸'不一样。差远了。这些语言的用户希望输入它们并期望获得尊重差异的搜索命中。
其次,这方面有很多现有的工作。请参阅lucene.apache.org,它有一组令牌过滤器,可以执行您可能想要或可能不想要的各种事情。
还有其他可能有用的行为的商业产品,例如将“运行”映射到“运行”以及所有这些行为。
如果您确定要这样做,请先将其标准化为“已分解”(NFKD),然后再删除重音符号。强奸(A)。