用Lucene搜索连字符词
我要lucene搜索连字符的单词, 例如:节能或“节能”作为一个词 因此,如果输入是节能的,标记器会生成如下术语 节能或高效或节能或节能 因此lucene返回的页面包含“节能”和“节能”,但我希望它返回的页面只包含“节能”页面用Lucene搜索连字符词,lucene,Lucene,我要lucene搜索连字符的单词, 例如:节能或“节能”作为一个词 因此,如果输入是节能的,标记器会生成如下术语 节能或高效或节能或节能 因此lucene返回的页面包含“节能”和“节能”,但我希望它返回的页面只包含“节能”页面 因此,问题是如何修改standardtokenizer以搜索整个节能单词,而不是将其拆分为单独的单词。使用WhitespaceAnalyzer而不是standardAnalyzer 这将生成仅在空白处分割的标记。但是,检查是否还有其他将要更改的内容。这是我在上的完整博客
因此,问题是如何修改standardtokenizer以搜索整个节能单词,而不是将其拆分为单独的单词。使用
WhitespaceAnalyzer
而不是standardAnalyzer
这将生成仅在空白处分割的标记。但是,检查是否还有其他将要更改的内容。这是我在
上的完整博客 如果您想在
StandardAnalyzer
中支持连字符,则必须在负责标记化的StandardTokenizerImpl
中进行更改标准标记器将连字符的单词一分为二,例如“energy-efficient”标记为energy,efficient。
由于类生成了
StandardTokenizerImpl.java
,其输入文件为StandardTokenizerImpl.jflex
,您必须在supplemental.jflex宏
中添加以下行,StandardTokenizerImpl.jflex
MidLetterSupp = ( [\u002D] )
之后,使用jflex生成StandardTokenizerImpl.java并重建索引。非常感谢!关于这些东西没有太多的文档。我有一个自定义的
分析器
来防止停止字被过滤,所以我现在在分析器中使用空白标记器
而不是标准标记器
。但是要注意,当使用空白标记符时,搜索会区分大小写。所以我必须先用一个小写过滤器来包装它。恐怕不行!例如,空白分析器的名称非常准确:“bubble”被视为与“bubble:”完全不同的标记。对于99%的情况,这没有多大用处。。。我觉得这对手术没用