【问题标题】:StandardAnalyzer, BackSlash and Lucene.netStandardAnalyzer、BackSlash 和 Lucene.net
【发布时间】:2011-07-27 13:56:21
【问题描述】:

我正在使用 Lucene.Net 2.9.2。我使用带有自定义停用词列表的 StandardAnalyzer,其中仅包含英文停用词。我的数据包括文件夹路径,例如“questions\text\testing data”。索引和搜索该文件夹路径时可以。但是,我正在使用 QueryPaser 并使用具有相同索引的标准分析器进行查询。查询解析器去除反斜杠并更改小写。所以我使用了转义字符'\',它不起作用。以下是我的测试代码。

QueryParser queryParser=new QueryParser("",new StandardAnalyzer(STOP_WORDS)); 查询query=queryParser.Parse("+Field1:questions\text\testing data +(Field2:good)");

查询语法变化“+Field1:”questionstexttesting“data+(Field2:good”。

文件夹路径=问题\文本\测试数据 搜索文字=好

在我的应用程序中,我不知道要搜索哪些字段。首先,我搜索一个单词并使用 lucene 查询语法保存搜索。后来我重用搜索并使用 QueryParser 传递。提前感谢您的任何建议!

【问题讨论】:

    标签: c# lucene lucene.net


    【解决方案1】:

    使用 KeywordAnalyzer 为您的路径编制索引,并使用 StandardAnalyzer 为您的数据编制索引。您可以使用 PerFieldAnalyzerWrapper 执行此操作。

    使用 BooleanQuery 构建搜索查询,为路径添加 PrefixQuery,并为用户提供的搜索字符串使用 QueryParser。

    var query = new BooleanQuery();
    query.Add(new PrefixQuery("Path", "questions\\text\\testing\\"), BooleanClause.Occur.MUST);
    
    var analyzer = new StandardAnalyzer(STOP_WORDS);
    var queryParser = new QueryParser("Data", analyzer);
    var parsedQuery = queryParser.Parse("data +Field2:good");
    query.Add(parsedQuery, BooleanClause.Occur.MUST);
    

    更改您的搜索界面,使用户无需手动输入路径。

    【讨论】:

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