2010-07-14 76 views
1

我试图查询一些结果使用布尔查询。但是,查询不会返回任何结果。Lucene添加额外的过滤器返回没有结果

这是我正在运行的FilterQuery。即使字段foo包含bar,并且字段foo3包含bar3,也不会返回结果。我有三重检查了我的领域,以确保这些字段确实存在于索引中。

+(foo:bar foo2:bar2) +foo3:bar3 

现在,如果从查询中删除+ foo3:bar3,我会正确返回结果。此外foo3:bar3正在编程添加,所以我不解析它。下面是一些相关的代码

//This code creates the first part of the query. 
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29,SearchFields, analyzer); 
Query q = mfqp.Parse(query); 
BooleanQuery filterquery = new BooleanQuery(); 
filterquery.Add(q,BooleanClause.Occur.MUST); 

//This code creates the second part of the query 
Query fq = new TermQuery(new Term("foo3","bar3")); 
filterquery.Add(fq, BooleanClause.Occur.MUST); 

//Perform the search 
ScoreDoc[] hits = isearch.Search(filterquery, null, ResultsToReturn).scoreDocs; 

仅供参考,我目前的设置字段进行分析,矢量设置为With_positions_offsets

+0

确实+ foo3:bar3本身返回任何文件? – bajafresh4life 2010-07-14 16:00:00

+0

如果我修改搜索的方式,它确实会返回文档。如果MFQP将术语传递给booleanquery,那么它就起作用。但是如果我使用termquery,它会失败 – 2010-07-14 16:22:43

回答

1

我使用一个TermQuery改变,到使用的QueryParser,这似乎已经解决了这个问题。