我正在为法语文本实现Lucene搜索。无论用户是否输入了重音符号,搜索都必须工作,并且还必须支持词干。我目前在Lucene 3中使用了基于雪球的法语词干分析器。Lucene:将ASCII折叠和词法结合起来用于法语
在索引方面,我在分析器中添加了一个ASCIIFoldingFilter
,后者运行在词干分析器之后。
但是,在搜索方面,操作是不可逆的:只有在输入内容包含重音符时,词干分析器才起作用。例如,它从université
末尾开始的ité
,但用户搜索输入universite
,在查询分析过程中,词干程序返回universit
。当然,由于该索引包含术语univers
,因此搜索universit
不会返回任何结果。
解决方案似乎是要改变分析器中词干和折叠的顺序:代替词干和折叠,在词干之前进行折叠。这有效地使操作可逆,但也显着地减少了词干分析员,因为许多词语不再符合词干规则。
或者,可以修改词干分析器以对折叠输入进行操作,即忽略重音,但是否会导致词干过度?
有没有办法有效地做折叠搜索而不改变词干算法的行为?