/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using Parameter = Lucene.Net.Util.Parameter; namespace Lucene.Net.Search { /// A clause in a BooleanQuery. [Serializable] public class BooleanClause { /// Specifies how terms may occur in matching documents. [Serializable] public sealed class Occur : Parameter { internal Occur(System.String name) : base(name) { } public override System.String ToString() { if (this == MUST) return "+"; if (this == MUST_NOT) return "-"; return ""; } /// Use this operator for terms that must appear in the matching documents. public static readonly Occur MUST = new Occur("MUST"); /// Use this operator for terms that should appear in the /// matching documents. For a BooleanQuery with two SHOULD /// subqueries, at least one of the queries must appear in the matching documents. /// public static readonly Occur SHOULD = new Occur("SHOULD"); /// Use this operator for terms that must not appear in the matching documents. /// Note that it is not possible to search for queries that only consist /// of a MUST_NOT query. /// public static readonly Occur MUST_NOT = new Occur("MUST_NOT"); } /// The query whose matching documents are combined by the boolean query. private Query query; // TODO: decrease visibility for Lucene 2.0 private Occur occur = Occur.SHOULD; /// Constructs a BooleanClause. public BooleanClause(Query query, Occur occur) { this.query = query; this.occur = occur; } public virtual Occur GetOccur() { return occur; } public virtual void SetOccur(Occur occur) { this.occur = occur; } public virtual Query GetQuery() { return query; } public virtual void SetQuery(Query query) { this.query = query; } public virtual bool IsProhibited() { return Occur.MUST_NOT.Equals(occur); } public virtual bool IsRequired() { return Occur.MUST.Equals(occur); } /// Returns true iff o is equal to this. public override bool Equals(System.Object o) { if (!(o is BooleanClause)) return false; BooleanClause other = (BooleanClause) o; return this.query.Equals(other.query) && this.occur.Equals(other.occur); } /// Returns a hash code value for this object. public override int GetHashCode() { return query.GetHashCode() ^ (Occur.MUST.Equals(occur) ? 1 : 0) ^ (Occur.MUST_NOT.Equals(occur) ? 2 : 0); } public override System.String ToString() { return occur.ToString() + query.ToString(); } } }