【问题标题】:Lucene.net / c# / add filter queryLucene.net/c#/添加过滤查询
【发布时间】:2014-09-04 07:15:36
【问题描述】:

我怀疑如何在 lucene.net 中使用 BooleanQuery 和 TermQuery 等进行查询。我希望它的行为方式与此 sql 语句相同:

"... WHERE ((isprivate = false) OR (isprivate = true and userid = 1))"

谁能帮帮我。

到现在我只有一个

BooleanQuery booleanQuery = new BooleanQuery();
TermQuery isPrivateQuery = new TermQuery(new Term("isprivate", "true"));

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc lucene.net


    【解决方案1】:

    您的查询可以重写为:

    "... WHERE (isprivate = false) OR (userid = 1)"
    

    所以你可以有下一个代码(考虑到你的值存储为字符串):

    BooleanQuery booleanQuery = new BooleanQuery();
    booleanQuery.Add(new TermQuery(new Term("isprivate", "true")), BooleanClause.Occur.SHOULD);
    booleanQuery.Add(new TermQuery(new Term("userid", "1")), BooleanClause.Occur.SHOULD);
    

    如果要进行更复杂的查询,则可以将一个 BooleanQuery 作为子句添加到另一个 BooleanQuery:

    // Creating "and" clause
    BooleanQuery booleanQueryInner = new BooleanQuery();
    booleanQueryInner.Add(new TermQuery(new Term("isprivate", "false")), BooleanClause.Occur.MUST);
    booleanQueryInner.Add(new TermQuery(new Term("userid", "1")), BooleanClause.Occur.MUST);
    
    // Creating "or" clause
    BooleanQuery booleanQueryMain = new BooleanQuery();
    booleanQueryMain.Add(new TermQuery(new Term("isprivate", "true")), BooleanClause.Occur.SHOULD);
    booleanQueryMain.Add(booleanQueryInner, BooleanClause.Occur.SHOULD);
    

    【讨论】:

    • 你能帮我解决一下“子句”布尔查询吗?提前致谢
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多