用Lucene搜索连字符词

用Lucene搜索连字符词,lucene,Lucene,我要lucene搜索连字符的单词, 例如:节能或“节能”作为一个词 因此,如果输入是节能的,标记器会生成如下术语 节能或高效或节能或节能 因此lucene返回的页面包含“节能”和“节能”,但我希望它返回的页面只包含“节能”页面 因此,问题是如何修改standardtokenizer以搜索整个节能单词,而不是将其拆分为单独的单词。使用WhitespaceAnalyzer而不是standardAnalyzer 这将生成仅在空白处分割的标记。但是,检查是否还有其他将要更改的内容。这是我在上的完整博客

我要lucene搜索连字符的单词, 例如:节能或“节能”作为一个词

因此,如果输入是节能的,标记器会生成如下术语 节能或高效或节能或节能

因此lucene返回的页面包含“节能”和“节能”,但我希望它返回的页面只包含“节能”页面


因此,问题是如何修改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%的情况,这没有多大用处。。。我觉得这对手术没用