私は次のコードを得ました:
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.IsActive
いNOT_ANALYZED
ます。