я получил следующий код:
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
.