/*
* 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 clauses are to 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 clauses that must appear in the matching documents.
public static readonly Occur MUST = new Occur("MUST");
/// Use this operator for clauses that should appear in the
/// matching documents. For a BooleanQuery with no MUST
/// clauses one or more SHOULD
clauses must match a document
/// for the BooleanQuery to match.
///
///
///
public static readonly Occur SHOULD = new Occur("SHOULD");
/// Use this operator for clauses 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
clause.
///
public static readonly Occur MUST_NOT = new Occur("MUST_NOT");
}
/// The query whose matching documents are combined by the boolean query.
private Query query;
private Occur occur;
/// 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();
}
}
}