我正在使用Lucene dot net 2.9版并构建我的查询如下(GetQuery方法)。我可以使用具有相同查询的Luke工具从同一索引获取结果。但不是通过dotnet API。不确定是Lucene.net中的一个错误?或者我的错误。使用标准分析器完成索引并分析我正在搜索的所有字段。
注意:它与Luke合作使用相同的索引。我使用.net lucene 2.94而不是Java Lucene库
使用Luke工具的查询是:
+(内容:极地位置:极地)+分机:/ pdf / xls / doc / docx
以下是无效的c#代码:
private static BooleanQuery GetQuery(string term, string exts)
{
string[] fields = { MetaKeys.Content, MetaKeys.Location };
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query multiFieldQuery = parser.Parse(term);
TermQuery extQuery = new TermQuery(new Term(MetaKeys.Ext, exts));
BooleanQuery combinedQuery = new BooleanQuery();
combinedQuery.Add(multiFieldQuery, BooleanClause.Occur.MUST);
if (extQuery != null)
{
combinedQuery.Add(extQuery, BooleanClause.Occur.MUST);
}
return combinedQuery;
}
它用作以下
string exts = "/pdf/xls/doc/docx";
BooleanQuery combinedQuery = GetQuery(term, exts);
TopDocs docs = indexSearch.Search(combinedQuery, to);
//resulting in 0 Hits
请关闭我之前的问题的人注意:在你要关闭问题之前,给原始海报一个机会(至少24小时)来纠正它。
答案 0 :(得分:0)
也许您会发现this适用:它有效,如果您需要任何其他建议,您可以问我,我在这里活跃! :)
基本上,它描述的与你正在做的事情大致相同,但它展示了一些你在这里没有做的事情;即,使用构造的MultiFieldQueryParser对象来解析输入搜索词并使用BooleanQuery将它们添加到一起。