lucene查询特殊字符
lucene query special characters
我无法理解 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));
查询 tags:brüder\-g 工作正常,但模糊查询 tags:brüder\-g~ 可以不是 return 任何东西。当街道名称为 Eselgasse 时,查询 tags:Esel~ 可以正常工作。
我使用 lucene 5.3.1
感谢帮助!
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"
这样的词
我无法理解 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));
查询 tags:brüder\-g 工作正常,但模糊查询 tags:brüder\-g~ 可以不是 return 任何东西。当街道名称为 Eselgasse 时,查询 tags:Esel~ 可以正常工作。
我使用 lucene 5.3.1
感谢帮助!
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" 这样的词