логический запрос lucene с помощью TermQuery? - PullRequest
1 голос
/ 24 ноября 2011

я получил следующий код:

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. так что я сказал себе, хорошо, нет проблем, давайте добавим еще один запрос в mainQuery сразу после цикла for вот так:

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.IsActive - это NOT_ANALYZED.

...