【问题标题】:Searching hyphenated words with Lucene使用 Lucene 搜索连字符的单词
【发布时间】:2010-08-31 20:03:27
【问题描述】:

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

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

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

所以问题是如何修改标准标记器以搜索节能作为一个完整的单词而不是将其分解为单独的单词。

【问题讨论】:

    标签: lucene


    【解决方案1】:

    使用WhitespaceAnalyzer 代替standardAnalyzer
    这将生成仅在空白处划分的标记。但请检查其他将要更改的内容。

    【讨论】:

    • 非常感谢!关于这些事情的文档并不多。我有一个自定义的Analyzer 来防止停用词被过滤,所以我现在在我的分析器中使用WhitespaceTokenizer 而不是StandardTokenizer。但请注意,当使用 WhitespaceTokenizer 时,搜索会区分大小写。所以我必须先用LowerCaseFilter 包装它。
    • 我不怕!空白分析器的命名非常准确:例如,“bubble”被视为与“bubble:”完全不同的标记。对于 99% 的情况,这没什么用......而且我认为它对 OP 没有用
    【解决方案2】:

    这是我在 Lucene and Hyphen 上的完整博客

    如果您想在 StandardAnalyzer 中支持 HYPHEN,那么您必须在负责标记化的 StandardTokenizerImpl 中进行更改。

    StandardTokenizer 将连字符分成两个单词,例如“energy-efficient”被标记为 energy,efficient。

    由于StandardTokenizerImpl.java 是从jFlex 生成的类,其输入文件是StandardTokenizerImpl.jflex,您必须在SUPPLEMENTARY.jflex-macro 中添加以下行,该行包含在StandardTokenizerImpl.jflex

                MidLetterSupp = ( [\u002D]  ) 
    

    之后使用 jflex 生成 StandardTokenizerImpl.java 并重建索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多