扩展字符(欧洲)到美国ascii用于搜索索引

时间:2011-03-26 15:06:16

标签: java search full-text-search solr character

我正在寻找一个表或启发式库,它可以将扩展字符转换为常规ascii o,如上面带帽子的o。

我希望这样做是为了搜索索引目的,因为大多数人都不打算用帽子输入o。

例如,我在搜索中键入“Cote”,但我希望我的搜索包含“Côte”之类的内容。

Solr似乎没有转换这些。 我尝试了java.text.Normalizer和朋友但是没有用。确实有效,请参阅下面的解决方案。

4 个答案:

答案 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)。