我正在使用Lucene.Net 2.9.2。我使用带有自定义停用词列表的StandardAnalyzer,其中包含英语停用词。我的数据包括文件夹路径,如“questions \ text \ testing data”。索引和搜索该文件夹路径时可以。但是,我正在使用QueryPaser并使用标准分析器进行查询,并在索引中使用相同的查询。查询解析器删除反斜杠并更改小写。所以我使用转义字符'\',它不起作用。以下是我的测试代码。
QueryParser queryParser = new QueryParser(“”,new StandardAnalyzer(STOP_WORDS)); 查询查询= queryParser.Parse(“+ Field1:questions \ text \ testing data +(Field2:good)”);
查询语法更改“+ Field1:”questionstexttesting“data +(Field2:good”。
文件夹路径= questions \ text \ testing数据 搜索文字=好
在我的应用程序中,我无法知道将搜索哪些字段。首先,我搜索一个单词并使用lucene查询语法保存搜索。后来我重用了搜索并传递了QueryParser。提前感谢任何建议!
答案 0 :(得分: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);
更改搜索界面,以便用户永远不需要手动输入路径。