C# lucene布尔查询和TermQuery?

C# lucene布尔查询和TermQuery?,c#,lucene,booleanquery,C#,Lucene,Booleanquery,我得到了以下代码: Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29); var mainQuery = new Lucene.Net.Search.BooleanQuery(); foreach (var str in fields) { var pars

我得到了以下代码:

Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);

    var mainQuery = new Lucene.Net.Search.BooleanQuery();

    foreach (var str in fields)
    {
        var parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, str, analyzer);
        mainQuery.Add(parser.Parse(search +"*"), Lucene.Net.Search.BooleanClause.Occur.SHOULD);
    }

    Lucene.Net.Search.TopScoreDocCollector collector = Lucene.Net.Search.TopScoreDocCollector.create(21, true);

    searcher.Search(mainQuery, collector);
    hits = collector.TopDocs().scoreDocs;
生活是美好的。 直到我注意到,我得到的结果也是不活跃的。 所以我对自己说,好吧,没问题,让我们在for循环之后向main查询添加另一个查询 像这样:

不幸的是,这不起作用。 有人能给我指出正确的方向吗? 我读过关于过滤器的文章,甚至尝试过应用一个过滤器,但是我失去了分数(好吧,不是真的失去了,但它们与最初的查询相差很远)。 我也读过关于
TermQueryRapper
,但找不到如何实现它(因此我不知道这是否是我需要的,即使这似乎是正确的方向)

编辑:我忘了提到,
字段中的所有字段都经过分析,

StateProperties.IsActive
未分析的

我从未熟悉Lucene的2.X语法,我从3开始。但是,添加另一个布尔查询的方法应该有效。我以前肯定用过这种方法。当你说它不起作用时,这是否意味着它没有受到应有的限制?或者您什么也没有得到?
Title:sinatra+StateProperties.IsActive:True
返回所有文档(除了活动状态为false的“sinatra”文档)。另一方面,
Title:sinatra+StateProperties.IsActive:False
不返回任何文档,即使我知道有一个名为“sinatra”的文档,其IsActive值为False。顺便问一下,你是如何开始使用lucene 3的?因为我在网站上看到的都是Lucene.NET2.9.2?对不起,我应该提到,我是用java而不是.Net工作的,至少在Lucene方面是这样。你熟悉Luke吗?尝试让它直接查看您的数据。我以前说过,“我知道有一个记录……”但我错了。从这里我可以看到,我的猜测是,您对索引数据的假设一定是错误的。例如,值是否可以是“false”而不是“false”?你说磁场没有被分析,所以它必须是精确匹配的。和/或您是否正在使用可能会更改查询的分析器?通常,如果您在一个可搜索字段上使用分析器,则应在所有字段上使用。我与luke比较熟悉,并已验证文档的存在与我搜索的完全一致,其标题为“Sinatra”,且IsActive值为False。我使用的是标准analayzer,并且只使用了它的一个实例。
var parser2 = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "StateProperties.IsActive", analyzer);
    mainQuery.Add(parser2.Parse("True"), Lucene.Net.Search.BooleanClause.Occur.MUST);