2016-02-08 164 views
0

我很难理解如何在lucene中处理特殊字符。
我的分析没有停止词,使特殊字符不会被删除:lucene查询特殊字符

CharArraySet stopwords = new CharArraySet(0, true); 
return new GermanAnalyzer(stopwords); 

比我创建这样的文档:

doc.add(new TextField("tags", "23", Store.NO)); 
doc.add(new TextField("tags", "Brüder-Grimm-Weg", Store.NO)); 

查询标签:布鲁德\ -g工作正常,但模糊查询标签:brüder\ -g〜不会返回任何东西。当街道的名称将是Eselgasse查询标签:ESEL〜将正常工作。
我利用Lucene 5.3.1

感谢您的帮助!

+0

奇怪的是,当* QueryParser *解析**标签时:brüder\ -gri **,* Query.toString()*返回**标签:brud标签:gri ** – george

回答

0

模糊查询(以及通配符或正则表达式的查询)不被QueryParser的分析。

如果您使用的是StandardAnalyzer,例如“Brüder-Grimm-Weg”将被编入索引为“brüder”,“grimm”和“weg”三个术语。因此,分析后,你有:

  • "tags:brüder\-g" - >tags:brüder tags:g
    这对tags:brüder

  • "tags:brüder\-g~"匹配 - >tags:brüder-g~2
    由于这不是分析,它仍然是一个单一的术语,你没有匹配,因为在你的索引中没有单个词语,比如“brüder-g”