1

私は次のコードを得ました:

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ます。

4

0 に答える 0