【问题标题】:Lucene insensitive whitespace analyzer?Lucene不敏感的空白分析器?
【发布时间】:2018-09-19 04:56:04
【问题描述】:

我使用 lucene 进行搜索,并使用空白分析器进行标记。看起来它存储正确。使用标准分析器,我的“C#”搜索将产生 C、C++ 的结果。我尝试过的每个分析器(我都没有尝试过)都这样做,除了空白分析器。这很好,除非我搜索 c# 我没有得到任何结果(我使用小写 C 而不是大写)。如果我搜索诸如“Lucene 不敏感空白分析器?”之类的标题,这很烦人。当它恰好是“Lucene 不敏感空白分析器?”时。 (注意前 3 个词以 upper 开头,最后一个词与我的搜索相比,一个大写一个大写全小写)。

如何制作不敏感的空白分析器?注意:WhitespaceAnalyzer 是密封的。

【问题讨论】:

    标签: lucene lucene.net whitespace


    【解决方案1】:

    【讨论】:

    • 我试图写一个分析器。你碰巧知道教程吗?一旦我找到一个好的教程,我会试试这个。我有足够的时间来解决这个问题
    • 请参阅lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/… 了解有关如何编写自己的分析器的更多信息
    • 我想不通。我最终在我的添加功能中将所有文本都设为大写,并在我的搜索功能中再次这样做。现在完美运行
    【解决方案2】:

    您可以创建如下自定义分析器(以 Lucene 版本 4.10.4 为例)

    import java.io.Reader;
    import org.apache.lucene.analysis.Analyzer;
    import org.apache.lucene.analysis.TokenStream;
    import org.apache.lucene.analysis.Tokenizer;
    import org.apache.lucene.analysis.core.LowerCaseFilter;
    import org.apache.lucene.analysis.core.WhitespaceTokenizer;
    
    public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
        @Override
        protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
                Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
                TokenStream filter = new LowerCaseFilter(tokenizer);
                return new TokenStreamComponents(tokenizer, filter);
        }
    }
    

    您可以在索引时使用分析器来配置索引编写器,也可以在搜索时使用它来创建查询解析器。

    【讨论】:

      【解决方案3】:
      class CaseInsensitiveWhitespaceAnalyzer : Analyzer
      {
          public override TokenStream TokenStream(string fieldName, TextReader reader)
          {
              var tokenizer = new WhitespaceTokenizer(reader);
              var lowercaseFilter = new LowerCaseFilter(tokenizer);
      
              return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
          }
      }
      

      这是一个适用于我的用例的 C# 版本。

      【讨论】:

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