﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Namespace Lucene.Net.Queries
   | Apache Lucene.NET 4.8.0-beta00008 Documentation </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Namespace Lucene.Net.Queries
   | Apache Lucene.NET 4.8.0-beta00008 Documentation ">
    <meta name="generator" content="docfx 2.50.0.0">
    
    <link rel="shortcut icon" href="../../logo/favicon.ico">
    <link rel="stylesheet" href="../../styles/docfx.vendor.css">
    <link rel="stylesheet" href="../../styles/docfx.css">
    <link rel="stylesheet" href="../../styles/main.css">
    <meta property="docfx:navrel" content="../../toc.html">
    <meta property="docfx:tocrel" content="../toc.html">
    
    <meta property="docfx:rel" content="../../">
    
  </head>
  <body data-spy="scroll" data-target="#affix" data-offset="120">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="../../index.html">
                <img id="logo" class="svg" src="../../logo/lucene-net-color.png" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search" id="breadcrumb">
            <ul class="breadcrumb">
              <li></li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list"></div>
          <div class="sr-items">
            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
          </div>
          <ul id="pagination"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="Lucene.Net.Queries">
  
  <h1 id="Lucene_Net_Queries" data-uid="Lucene.Net.Queries" class="text-break">Namespace Lucene.Net.Queries
  </h1>
  <div class="markdown level0 summary"><!--
 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.
-->
<p>Filters and Queries that add to core Lucene.</p>
</div>
  <div class="markdown level0 conceptual"></div>
  <div class="markdown level0 remarks"></div>
    <h3 id="classes">Classes
  </h3>
      <h4><a class="xref" href="Lucene.Net.Queries.BooleanFilter.html">BooleanFilter</a></h4>
      <section><p>A container <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a> that allows Boolean composition of <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a>s.
<a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a>s are allocated into one of three logical constructs;
SHOULD, MUST NOT, MUST
The results <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a> BitSet is constructed as follows:
SHOULD Filters are OR&apos;d together
The resulting <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a> is NOT&apos;d with the NOT <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a>s
The resulting <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a> is AND&apos;d with the MUST <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a>s</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.BoostingQuery.html">BoostingQuery</a></h4>
      <section><p>The <a class="xref" href="Lucene.Net.Queries.BoostingQuery.html">BoostingQuery</a> class can be used to effectively demote results that match a given query. 
Unlike the &quot;NOT&quot; clause, this still selects documents that contain undesirable terms, 
but reduces their overall score:</p>
<pre><code>    Query balancedQuery = new BoostingQuery(positiveQuery, negativeQuery, 0.01f);</code></pre>
<p>In this scenario the positiveQuery contains the mandatory, desirable criteria which is used to 
select all matching documents, and the negativeQuery contains the undesirable elements which 
are simply used to lessen the scores. Documents that match the negativeQuery have their score 
multiplied by the supplied &quot;boost&quot; parameter, so this should be less than 1 to achieve a 
demoting effect</p>
<p>This code was originally made available here: <code>[WWW] <a href="http://marc.theaimsgroup.com/?l=lucene-user&amp;m=108058407130459&amp;w=2">http://marc.theaimsgroup.com/?l=lucene-user&amp;m=108058407130459&amp;w=2</a> </code>
and is documented here: <code><a href="http://wiki.apache.org/lucene-java/CommunityContributions">http://wiki.apache.org/lucene-java/CommunityContributions</a></code></p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.ChainedFilter.html">ChainedFilter</a></h4>
      <section><p>
Allows multiple <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a>s to be chained.
Logical operations such as <strong>NOT</strong> and <strong>XOR</strong>
are applied between filters. One operation can be used
for all filters, or a specific operation can be declared
for each filter.
</p>
<p>
Order in which filters are called depends on
the position of the filter in the chain. It&apos;s probably
more efficient to place the most restrictive filters/least 
computationally-intensive filters first.
</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.CommonTermsQuery.html">CommonTermsQuery</a></h4>
      <section><p>A query that executes high-frequency terms in a optional sub-query to prevent
slow queries due to &quot;common&quot; terms like stopwords. This query
builds 2 queries off the <a class="xref" href="Lucene.Net.Queries.CommonTermsQuery.html#Lucene_Net_Queries_CommonTermsQuery_Add_Lucene_Net_Index_Term_">Add(Term)</a> added terms: low-frequency
terms are added to a required boolean clause and high-frequency terms are
added to an optional boolean clause. The optional clause is only executed if
the required &quot;low-frequency&quot; clause matches. Scores produced by this query
will be slightly different than plain <a class="xref" href="../Lucene.Net/Lucene.Net.Search.BooleanQuery.html">BooleanQuery</a> scorer mainly due to
differences in the <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Similarities.Similarity.html#Lucene_Net_Search_Similarities_Similarity_Coord_System_Int32_System_Int32_">Coord(Int32, Int32)</a> number of leaf queries
in the required boolean clause. In most cases, high-frequency terms are
unlikely to significantly contribute to the document score unless at least
one of the low-frequency terms are matched.  This query can improve
query execution times significantly if applicable.
<p>
<a class="xref" href="Lucene.Net.Queries.CommonTermsQuery.html">CommonTermsQuery</a> has several advantages over stopword filtering at
index or query time since a term can be &quot;classified&quot; based on the actual
document frequency in the index and can prevent slow queries even across
domains without specialized stopword files.
</p>
<p>
<strong>Note:</strong> if the query only contains high-frequency terms the query is
rewritten into a plain conjunction query ie. all high-frequency terms need to
match in order to match a document.
</p>
<p>
Collection initializer note: To create and populate a <a class="xref" href="Lucene.Net.Queries.CommonTermsQuery.html">CommonTermsQuery</a>
in a single statement, you can use the following example as a guide:</p>
<pre><code>var query = new CommonTermsQuery() {
    new Term(&quot;field&quot;, &quot;microsoft&quot;), 
    new Term(&quot;field&quot;, &quot;office&quot;)
};</code></pre>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.CustomScoreProvider.html">CustomScoreProvider</a></h4>
      <section><p>An instance of this subclass should be returned by
<a class="xref" href="Lucene.Net.Queries.CustomScoreQuery.html#Lucene_Net_Queries_CustomScoreQuery_GetCustomScoreProvider_Lucene_Net_Index_AtomicReaderContext_">GetCustomScoreProvider(AtomicReaderContext)</a>, if you want
to modify the custom score calculation of a <a class="xref" href="Lucene.Net.Queries.CustomScoreQuery.html">CustomScoreQuery</a>.
<p>Since Lucene 2.9, queries operate on each segment of an index separately,
so the protected <a class="xref" href="Lucene.Net.Queries.CustomScoreProvider.html#Lucene_Net_Queries_CustomScoreProvider_m_context">m_context</a> field can be used to resolve doc IDs,
as the supplied <code>doc</code> ID is per-segment and without knowledge
of the <a class="xref" href="../Lucene.Net/Lucene.Net.Index.IndexReader.html">IndexReader</a> you cannot access the document or <a class="xref" href="../Lucene.Net/Lucene.Net.Search.IFieldCache.html">IFieldCache</a>.</p>
<div class="lucene-block lucene-experimental">This is a Lucene.NET EXPERIMENTAL API, use at your own risk</div><p>@since 2.9.2</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.CustomScoreQuery.html">CustomScoreQuery</a></h4>
      <section><p>Query that sets document score as a programmatic function of several (sub) scores:
<ul><li>the score of its subQuery (any query)</li><li>(optional) the score of its <a class="xref" href="Lucene.Net.Queries.Function.FunctionQuery.html">FunctionQuery</a> (or queries).</li></ul>
Subclasses can modify the computation by overriding <a class="xref" href="Lucene.Net.Queries.CustomScoreQuery.html#Lucene_Net_Queries_CustomScoreQuery_GetCustomScoreProvider_Lucene_Net_Index_AtomicReaderContext_">GetCustomScoreProvider(AtomicReaderContext)</a>.
<p>
<div class="lucene-block lucene-experimental">This is a Lucene.NET EXPERIMENTAL API, use at your own risk</div></section>
      <h4><a class="xref" href="Lucene.Net.Queries.FilterClause.html">FilterClause</a></h4>
      <section><p>A <a class="xref" href="../Lucene.Net/Lucene.Net.Search.Filter.html">Filter</a> that wrapped with an indication of how that filter
is used when composed with another filter.
(Follows the boolean logic in <a class="xref" href="../Lucene.Net/Lucene.Net.Search.BooleanClause.html">BooleanClause</a> for composition 
of queries.)</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.TermFilter.html">TermFilter</a></h4>
      <section><p>A filter that includes documents that match with a specific term.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Queries.TermsFilter.html">TermsFilter</a></h4>
      <section><p>Constructs a filter for docs matching any of the terms added to this class.
Unlike a RangeFilter this can be used for filtering on multiple terms that are not necessarily in
a sequence. An example might be a collection of primary keys from a database query result or perhaps
a choice of &quot;category&quot; labels picked by the end user. As a filter, this is much faster than the
equivalent query (a <a class="xref" href="../Lucene.Net/Lucene.Net.Search.BooleanQuery.html">BooleanQuery</a> with many &quot;should&quot; <a class="xref" href="../Lucene.Net/Lucene.Net.Search.TermQuery.html">TermQuery</a>s)</p>
</section>
</article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <div class="contribution">
                <ul class="nav">
                  <li>
                    <a href="https://github.com/apache/lucenenet/blob/docs/4.8.0-beta00008/src/Lucene.Net.Queries/package.md/#L2" class="contribution-link">Improve this Doc</a>
                  </li>
                </ul>
              </div>
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            Copyright © 2020 Licensed to the Apache Software Foundation (ASF)
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="../../styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="../../styles/docfx.js"></script>
    <script type="text/javascript" src="../../styles/main.js"></script>
  </body>
</html>
