使用TermQuery进行lucene布尔查询?

时间:2011-11-24 12:57:50

标签: 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 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;

生活很美好。 直到我注意到,我得到的结果也是NotActive。 所以我对自己说,好吧,没问题,让我们在for循环之后向mainQuery添加另一个查询 像这样:

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);
不幸的是,这不起作用。 谁能指出我这样做的正确方向? 我已经阅读了有关过滤器的内容,甚至设法应用过滤器,但后来我失去了分数(好吧,并没有真正失败,但它们远离原始查询)。 我也读到了TermQueryWrapper,但是找不到如何实现(所以我不知道那是否需要,即使它似乎是正确的方向)。

编辑:我忘了提及,fields中的所有字段都是分析的, StateProperties.IsActiveNOT_ANALYZED

0 个答案:

没有答案