搜索时忽略变音符号

Dón*_*nal 3 java lucene search grails compass-lucene

我正在使用Compass/Lucene来搜索和索引我的数据库.我想在搜索时忽略变音符号和字符大小写,这样查询"foo"将匹配"Fóo"和"foo",查询"fóó"将匹配"fóo"和"fOO".

基于我所读到的内容,似乎我需要更改Compass在索引和搜索我的上下文时使用的默认分析器.我已经找到了指定要使用的分析器的位置,但我似乎无法找到满足我要求的分析器实现.是否已经存在一个忽略变音符号和字符大小写的分析器,或者我是否需要编写自己的分析器?

Rec*_*rse 6

看看org.apache.lucene.analysis.ASCIIFoldingFilter,看看它是否符合您的要求.如果没有,我会用它的来源作为编写自己的来源.

您是正确的,您必须使用相同的Analyzer配置进行索引和查询,原因很明显,如果您从索引中删除了所有变音符号,则还需要从任何查询中删除它们.

需要注意的一件事是确保在索引/查询过程中将任何unicode规范化.对于具体见:http://unicode.org/reports/tr15/,http://unicode.org/faq/normalization.htmlhttp://docs.oracle.com/javase/6/docs/api/ java/text/Normalizer.html.

编辑:正如下面的评论中所提到的,作为过滤器,您不能直接使用ASCIIFoldingFilter作为分析器,但是有关于将它包含在分析器中的直接说明:stackoverflow.com/a/3834244/390153

编辑:正如@jspboix在下面的评论中所提到的,你还需要链接LowerCaseFilter来处理字符大小写.