blob: bc072accc9a7dce037449dd5e5b7c77249d81f15 [file] [log] [blame]
<!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.QueryParsers.Flexible.Core.Processors
| Apache Lucene.NET 4.8.0-beta00010 Documentation </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors
| Apache Lucene.NET 4.8.0-beta00010 Documentation ">
<meta name="generator" content="docfx 2.56.0.0">
<link rel="shortcut icon" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/logo/favicon.ico">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.css">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.css">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.css">
<meta property="docfx:navrel" content="toc.html">
<meta property="docfx:tocrel" content="queryparser/toc.html">
<meta property="docfx:rel" content="https://lucenenet.apache.org/docs/4.8.0-beta00009/">
</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="/">
<img id="logo" class="svg" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/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">
<ul class="level0 breadcrumb">
<li>
<a href="https://lucenenet.apache.org/docs/4.8.0-beta00009/">API</a>
<span id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</span>
</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.QueryParsers.Flexible.Core.Processors">
<h1 id="Lucene_Net_QueryParsers_Flexible_Core_Processors" data-uid="Lucene.Net.QueryParsers.Flexible.Core.Processors" class="text-break">Namespace Lucene.Net.QueryParsers.Flexible.Core.Processors
</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>Interfaces and implementations used by query node processors</p>
<h2 id="query-node-processors">Query Node Processors</h2>
<p> The package <tt>org.apache.lucene.queryParser.processors</tt> contains interfaces that should be implemented by every query node processor. </p>
<p> The interface that every query node processor should implement is <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html">QueryNodeProcessor</a>. </p>
<p> A query node processor should be used to process a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html">QueryNode</a> tree. <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html">QueryNode</a> trees can be programmatically created or generated by a text parser. See <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Parser.html">Lucene.Net.QueryParsers.Flexible.Core.Parser</a> for more details about text parsers. </p>
<p> A query node processor should be used to process a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html">QueryNode</a> tree. <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html">QueryNode</a> trees can be programmatically created or generated by a text parser. See <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Parser.html">Lucene.Net.QueryParsers.Flexible.Core.Parser</a> for more details about text parsers. </p>
<p> A pipeline of processors can be assembled using <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html">QueryNodeProcessorPipeline</a>. </p>
<p> Implementors may want to extend &lt;xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl&gt;, which simplifies the implementation, because it walks automatically the <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.QueryNode.html">QueryNode</a>. See &lt;xref:Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorImpl&gt; for more details. </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.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html">NoChildOptimizationQueryNodeProcessor</a></h4>
<section><p>A <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.NoChildOptimizationQueryNodeProcessor.html">NoChildOptimizationQueryNodeProcessor</a> removes every
BooleanQueryNode, BoostQueryNode, TokenizedPhraseQueryNode or
ModifierQueryNode that do not have a valid children.
<p>
Example: When the children of these nodes are removed for any reason then the
nodes may become invalid.
</p></p>
</section>
<h4><a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html">QueryNodeProcessor</a></h4>
<section><p>This is a default implementation for the <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html">IQueryNodeProcessor</a>
interface, it&apos;s an abstract class, so it should be extended by classes that
want to process a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html">IQueryNode</a> tree.
<p>
This class process <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html">IQueryNode</a>s from left to right in the tree. While
it&apos;s walking down the tree, for every node,
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_QueryNodeProcessor_PreProcessNode_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode_">PreProcessNode(IQueryNode)</a> is invoked. After a node&apos;s children are
processed, <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_QueryNodeProcessor_PostProcessNode_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode_">PostProcessNode(IQueryNode)</a> is invoked for that node.
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_QueryNodeProcessor_SetChildrenOrder_System_Collections_Generic_IList_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode__">SetChildrenOrder(IList&lt;IQueryNode&gt;)</a> is invoked before
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_QueryNodeProcessor_PostProcessNode_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode_">PostProcessNode(IQueryNode)</a> only if the node has at least one child,
in <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_QueryNodeProcessor_SetChildrenOrder_System_Collections_Generic_IList_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode__">SetChildrenOrder(IList&lt;IQueryNode&gt;)</a> the implementor might redefine the
children order or remove any children from the children list.
</p>
<p>
Here is an example about how it process the nodes:
</p></p>
<pre>
a
/ \
b e
/ \
c d
</pre>
<p><p>
Here is the order the methods would be invoked for the tree described above:
</p></p>
<pre><code> PreProcessNode( a );
PreProcessNode( b );
PreProcessNode( c );
PostProcessNode( c );
PreProcessNode( d );
PostProcessNode( d );
SetChildrenOrder( bChildrenList );
PostProcessNode( b );
PreProcessNode( e );
PostProcessNode( e );
SetChildrenOrder( aChildrenList );
PostProcessNode( a )</code></pre>
</section>
<h4><a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html">QueryNodeProcessorPipeline</a></h4>
<section><p>A <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html">QueryNodeProcessorPipeline</a> class should be used to build a query
node processor pipeline.
<p>
When a query node tree is processed using this class, it passes the query
node tree to each processor on the pipeline and the result from each
processor is passed to the next one, always following the order the
processors were on the pipeline.
<p>
When a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html">QueryConfigHandler</a> object is set on a
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html">QueryNodeProcessorPipeline</a>, it also takes care of setting this
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html">QueryConfigHandler</a> on all processor on pipeline.</p>
</section>
<h4><a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.RemoveDeletedQueryNodesProcessor.html">RemoveDeletedQueryNodesProcessor</a></h4>
<section><p>A <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.QueryNodeProcessorPipeline.html">QueryNodeProcessorPipeline</a> class removes every instance of
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html">DeletedQueryNode</a> from a query node tree. If the resulting root node
is a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.DeletedQueryNode.html">DeletedQueryNode</a>, <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.MatchNoDocsQueryNode.html">MatchNoDocsQueryNode</a> is returned.</p>
</section>
<h3 id="interfaces">Interfaces
</h3>
<h4><a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html">IQueryNodeProcessor</a></h4>
<section><p>An <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html">IQueryNodeProcessor</a> is an interface for classes that process a
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Nodes.IQueryNode.html">IQueryNode</a> tree.
<p>
The implementor of this class should perform some operation on a query node
tree and return the same or another query node tree.
</p>
<p>
It also may carry a <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html">QueryConfigHandler</a> object that contains
configuration about the query represented by the query tree or the
collection/index where it&apos;s intended to be executed.
</p>
<p>
In case there is any <a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Config.QueryConfigHandler.html">QueryConfigHandler</a> associated to the query tree
to be processed, it should be set using
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_IQueryNodeProcessor_SetQueryConfigHandler_Lucene_Net_QueryParsers_Flexible_Core_Config_QueryConfigHandler_">SetQueryConfigHandler(QueryConfigHandler)</a> before
<a class="xref" href="Lucene.Net.QueryParsers.Flexible.Core.Processors.IQueryNodeProcessor.html#Lucene_Net_QueryParsers_Flexible_Core_Processors_IQueryNodeProcessor_Process_Lucene_Net_QueryParsers_Flexible_Core_Nodes_IQueryNode_">Process(IQueryNode)</a> is invoked.
</p></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-beta00010/src/Lucene.Net.QueryParser/Flexible/Core/Processors/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="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.js"></script>
<script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.js"></script>
<script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.js"></script>
</body>
</html>