lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mharw...@apache.org
Subject svn commit: r928114 [3/3] - in /lucene/dev/trunk/lucene/contrib: ./ xml-query-parser/ xml-query-parser/docs/ xml-query-parser/src/java/org/apache/lucene/xmlparser/ xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/ xml-query-parser/src/tes...
Date Sat, 27 Mar 2010 00:36:56 GMT
Modified: lucene/dev/trunk/lucene/contrib/xml-query-parser/docs/toc.html
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/docs/toc.html?rev=928114&r1=928113&r2=928114&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/docs/toc.html (original)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/docs/toc.html Sat Mar 27 00:36:55 2010
@@ -4,10 +4,10 @@
 <link rel='StyleSheet' href='DTDDocStyle.css' type='text/css' media='screen' />
 <link rel='StyleSheet' href='dtreeStyle.css' type='text/css' media='screen' />
 <script type='text/javascript' src='cctree.js'></script>
-<title>Lucene XML Query syntax, 08-Jul-2008</title>
+<title>Lucene XML Query syntax, Mar 26, 2010</title>
 </head><body>
 <h1 class='TOCTitle'>Lucene XML Query syntax</h1>
-<h2 class='TOCTitle'>08-Jul-2008</h2>
+<h2 class='TOCTitle'>Mar 26, 2010</h2>
 <a href='elementsIndex.html' target='detail'>Elements' index</a><hr />
 <div class='dtree'>
 <script type='text/javascript'>
@@ -90,422 +90,529 @@ eltTree.addNode('35','<b>@lowerTerm</b>'
 eltTree.linkNodes('31','35')
 eltTree.addNode('36','<b>@upperTerm</b>','LuceneContribQuery.dtd.html#RangeFilter_upperTerm',false,false)
 eltTree.linkNodes('31','36')
-eltTree.addNode('37','<b>CachedFilter</b>','LuceneContribQuery.dtd.html#CachedFilter',false,false)
+eltTree.addNode('37','<b>&lt;NumericRangeFilter/&gt;</b>','LuceneContribQuery.dtd.html#NumericRangeFilter',false,false)
 eltTree.linkNodes('30','37')
-eltTree.addNode('38','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.addNode('38','@fieldName','LuceneContribQuery.dtd.html#NumericRangeFilter_fieldName',false,false)
 eltTree.linkNodes('37','38')
-eltTree.linkNodes('38','6','<b>BooleanQuery</b>')
-eltTree.linkNodes('38','12','<b>UserQuery</b>')
-eltTree.linkNodes('38','15','<b>FilteredQuery</b>')
-eltTree.linkNodes('38','19','<b>TermQuery</b>')
-eltTree.linkNodes('38','22','<b>TermsQuery</b>')
-eltTree.linkNodes('38','27','<b>MatchAllDocsQuery</b>')
-eltTree.linkNodes('38','28','<b>ConstantScoreQuery</b>')
-eltTree.addNode('39','<b>SpanOr</b>','LuceneContribQuery.dtd.html#SpanOr',false,false)
-eltTree.linkNodes('38','39')
-eltTree.addNode('40','<i>&lt;choice&gt;*</i>',null,true,false)
-eltTree.linkNodes('39','40')
-eltTree.linkNodes('40','39','<b>SpanOr</b>')
-eltTree.addNode('41','<b>SpanNear</b>','LuceneContribQuery.dtd.html#SpanNear',false,false)
-eltTree.linkNodes('40','41')
-eltTree.addNode('42','@inOrder','LuceneContribQuery.dtd.html#SpanNear_inOrder',false,false)
-eltTree.linkNodes('41','42')
-eltTree.addNode('43','<b>@slop</b>','LuceneContribQuery.dtd.html#SpanNear_slop',false,false)
-eltTree.linkNodes('41','43')
-eltTree.addNode('44','<i>&lt;choice&gt;*</i>',null,true,false)
-eltTree.linkNodes('41','44')
-eltTree.linkNodes('44','39','<b>SpanOr</b>')
-eltTree.linkNodes('44','41','<b>SpanNear</b>')
-eltTree.addNode('45','<b>SpanOrTerms</b>','LuceneContribQuery.dtd.html#SpanOrTerms',false,false)
-eltTree.linkNodes('44','45')
-eltTree.addNode('46','<b>@fieldName</b>','LuceneContribQuery.dtd.html#SpanOrTerms_fieldName',false,false)
+eltTree.addNode('39','@includeLower','LuceneContribQuery.dtd.html#NumericRangeFilter_includeLower',false,false)
+eltTree.linkNodes('37','39')
+eltTree.addNode('40','@includeUpper','LuceneContribQuery.dtd.html#NumericRangeFilter_includeUpper',false,false)
+eltTree.linkNodes('37','40')
+eltTree.addNode('41','<b>@lowerTerm</b>','LuceneContribQuery.dtd.html#NumericRangeFilter_lowerTerm',false,false)
+eltTree.linkNodes('37','41')
+eltTree.addNode('42','@precisionStep','LuceneContribQuery.dtd.html#NumericRangeFilter_precisionStep',false,false)
+eltTree.linkNodes('37','42')
+eltTree.addNode('43','@type','LuceneContribQuery.dtd.html#NumericRangeFilter_type',false,false)
+eltTree.linkNodes('37','43')
+eltTree.addNode('44','<b>@upperTerm</b>','LuceneContribQuery.dtd.html#NumericRangeFilter_upperTerm',false,false)
+eltTree.linkNodes('37','44')
+eltTree.addNode('45','<b>CachedFilter</b>','LuceneContribQuery.dtd.html#CachedFilter',false,false)
+eltTree.linkNodes('30','45')
+eltTree.addNode('46','<b><i>&lt;choice&gt;</i></b>',null,true,false)
 eltTree.linkNodes('45','46')
-eltTree.addNode('47','<b>SpanFirst</b>','LuceneContribQuery.dtd.html#SpanFirst',false,false)
-eltTree.linkNodes('44','47')
-eltTree.addNode('48','@boost','LuceneContribQuery.dtd.html#SpanFirst_boost',false,false)
-eltTree.linkNodes('47','48')
-eltTree.addNode('49','<b>@end</b>','LuceneContribQuery.dtd.html#SpanFirst_end',false,false)
-eltTree.linkNodes('47','49')
-eltTree.addNode('50','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('47','50')
-eltTree.linkNodes('50','39','<b>SpanOr</b>')
-eltTree.linkNodes('50','41','<b>SpanNear</b>')
-eltTree.linkNodes('50','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('50','47','<b>SpanFirst</b>')
-eltTree.addNode('51','<b>SpanNot</b>','LuceneContribQuery.dtd.html#SpanNot',false,false)
-eltTree.linkNodes('50','51')
-eltTree.addNode('52','<b>Include</b>','LuceneContribQuery.dtd.html#Include',false,false)
-eltTree.linkNodes('51','52')
-eltTree.addNode('53','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('52','53')
-eltTree.linkNodes('53','39','<b>SpanOr</b>')
-eltTree.linkNodes('53','41','<b>SpanNear</b>')
-eltTree.linkNodes('53','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('53','47','<b>SpanFirst</b>')
-eltTree.linkNodes('53','51','<b>SpanNot</b>')
-eltTree.addNode('54','<b>SpanTerm</b>','LuceneContribQuery.dtd.html#SpanTerm',false,false)
-eltTree.linkNodes('53','54')
-eltTree.addNode('55','<b>@fieldName</b>','LuceneContribQuery.dtd.html#SpanTerm_fieldName',false,false)
-eltTree.linkNodes('54','55')
-eltTree.addNode('56','<b>Exclude</b>','LuceneContribQuery.dtd.html#Exclude',false,false)
-eltTree.linkNodes('51','56')
-eltTree.addNode('57','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('46','6','<b>BooleanQuery</b>')
+eltTree.linkNodes('46','12','<b>UserQuery</b>')
+eltTree.linkNodes('46','15','<b>FilteredQuery</b>')
+eltTree.linkNodes('46','19','<b>TermQuery</b>')
+eltTree.linkNodes('46','22','<b>TermsQuery</b>')
+eltTree.linkNodes('46','27','<b>MatchAllDocsQuery</b>')
+eltTree.linkNodes('46','28','<b>ConstantScoreQuery</b>')
+eltTree.addNode('47','<b>BoostingTermQuery</b>','LuceneContribQuery.dtd.html#BoostingTermQuery',false,false)
+eltTree.linkNodes('46','47')
+eltTree.addNode('48','<b>&lt;NumericRangeQuery/&gt;</b>','LuceneContribQuery.dtd.html#NumericRangeQuery',false,false)
+eltTree.linkNodes('46','48')
+eltTree.addNode('49','@fieldName','LuceneContribQuery.dtd.html#NumericRangeQuery_fieldName',false,false)
+eltTree.linkNodes('48','49')
+eltTree.addNode('50','@includeLower','LuceneContribQuery.dtd.html#NumericRangeQuery_includeLower',false,false)
+eltTree.linkNodes('48','50')
+eltTree.addNode('51','@includeUpper','LuceneContribQuery.dtd.html#NumericRangeQuery_includeUpper',false,false)
+eltTree.linkNodes('48','51')
+eltTree.addNode('52','<b>@lowerTerm</b>','LuceneContribQuery.dtd.html#NumericRangeQuery_lowerTerm',false,false)
+eltTree.linkNodes('48','52')
+eltTree.addNode('53','@precisionStep','LuceneContribQuery.dtd.html#NumericRangeQuery_precisionStep',false,false)
+eltTree.linkNodes('48','53')
+eltTree.addNode('54','@type','LuceneContribQuery.dtd.html#NumericRangeQuery_type',false,false)
+eltTree.linkNodes('48','54')
+eltTree.addNode('55','<b>@upperTerm</b>','LuceneContribQuery.dtd.html#NumericRangeQuery_upperTerm',false,false)
+eltTree.linkNodes('48','55')
+eltTree.addNode('56','<b>SpanOr</b>','LuceneContribQuery.dtd.html#SpanOr',false,false)
+eltTree.linkNodes('46','56')
+eltTree.addNode('57','<i>&lt;choice&gt;*</i>',null,true,false)
 eltTree.linkNodes('56','57')
-eltTree.linkNodes('57','39','<b>SpanOr</b>')
-eltTree.linkNodes('57','41','<b>SpanNear</b>')
-eltTree.linkNodes('57','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('57','47','<b>SpanFirst</b>')
-eltTree.linkNodes('57','51','<b>SpanNot</b>')
-eltTree.linkNodes('57','54','<b>SpanTerm</b>')
-eltTree.linkNodes('50','54','<b>SpanTerm</b>')
-eltTree.linkNodes('44','51','<b>SpanNot</b>')
-eltTree.linkNodes('44','54','<b>SpanTerm</b>')
-eltTree.linkNodes('40','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('40','47','<b>SpanFirst</b>')
-eltTree.linkNodes('40','51','<b>SpanNot</b>')
-eltTree.linkNodes('40','54','<b>SpanTerm</b>')
-eltTree.linkNodes('38','41','<b>SpanNear</b>')
-eltTree.linkNodes('38','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('38','47','<b>SpanFirst</b>')
-eltTree.linkNodes('38','51','<b>SpanNot</b>')
-eltTree.linkNodes('38','54','<b>SpanTerm</b>')
-eltTree.addNode('58','<b>LikeThisQuery</b>','LuceneContribQuery.dtd.html#LikeThisQuery',false,false)
-eltTree.linkNodes('38','58')
-eltTree.addNode('59','@boost','LuceneContribQuery.dtd.html#LikeThisQuery_boost',false,false)
+eltTree.linkNodes('57','56','<b>SpanOr</b>')
+eltTree.addNode('58','<b>SpanNear</b>','LuceneContribQuery.dtd.html#SpanNear',false,false)
+eltTree.linkNodes('57','58')
+eltTree.addNode('59','@inOrder','LuceneContribQuery.dtd.html#SpanNear_inOrder',false,false)
 eltTree.linkNodes('58','59')
-eltTree.addNode('60','@fieldNames','LuceneContribQuery.dtd.html#LikeThisQuery_fieldNames',false,false)
+eltTree.addNode('60','<b>@slop</b>','LuceneContribQuery.dtd.html#SpanNear_slop',false,false)
 eltTree.linkNodes('58','60')
-eltTree.addNode('61','@maxQueryTerms','LuceneContribQuery.dtd.html#LikeThisQuery_maxQueryTerms',false,false)
+eltTree.addNode('61','<i>&lt;choice&gt;*</i>',null,true,false)
 eltTree.linkNodes('58','61')
-eltTree.addNode('62','@minTermFrequency','LuceneContribQuery.dtd.html#LikeThisQuery_minTermFrequency',false,false)
-eltTree.linkNodes('58','62')
-eltTree.addNode('63','@percentTermsToMatch','LuceneContribQuery.dtd.html#LikeThisQuery_percentTermsToMatch',false,false)
-eltTree.linkNodes('58','63')
-eltTree.addNode('64','@stopWords','LuceneContribQuery.dtd.html#LikeThisQuery_stopWords',false,false)
-eltTree.linkNodes('58','64')
-eltTree.addNode('65','<b>BoostingQuery</b>','LuceneContribQuery.dtd.html#BoostingQuery',false,false)
-eltTree.linkNodes('38','65')
-eltTree.addNode('66','@boost','LuceneContribQuery.dtd.html#BoostingQuery_boost',false,false)
-eltTree.linkNodes('65','66')
-eltTree.linkNodes('65','17','<b>Query</b>')
-eltTree.addNode('67','<b>BoostQuery</b>','LuceneContribQuery.dtd.html#BoostQuery',false,false)
-eltTree.linkNodes('65','67')
-eltTree.addNode('68','@boost','LuceneContribQuery.dtd.html#BoostQuery_boost',false,false)
+eltTree.linkNodes('61','56','<b>SpanOr</b>')
+eltTree.linkNodes('61','58','<b>SpanNear</b>')
+eltTree.addNode('62','<b>SpanOrTerms</b>','LuceneContribQuery.dtd.html#SpanOrTerms',false,false)
+eltTree.linkNodes('61','62')
+eltTree.addNode('63','<b>@fieldName</b>','LuceneContribQuery.dtd.html#SpanOrTerms_fieldName',false,false)
+eltTree.linkNodes('62','63')
+eltTree.addNode('64','<b>SpanFirst</b>','LuceneContribQuery.dtd.html#SpanFirst',false,false)
+eltTree.linkNodes('61','64')
+eltTree.addNode('65','@boost','LuceneContribQuery.dtd.html#SpanFirst_boost',false,false)
+eltTree.linkNodes('64','65')
+eltTree.addNode('66','<b>@end</b>','LuceneContribQuery.dtd.html#SpanFirst_end',false,false)
+eltTree.linkNodes('64','66')
+eltTree.addNode('67','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('64','67')
+eltTree.linkNodes('67','56','<b>SpanOr</b>')
+eltTree.linkNodes('67','58','<b>SpanNear</b>')
+eltTree.linkNodes('67','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('67','64','<b>SpanFirst</b>')
+eltTree.addNode('68','<b>SpanNot</b>','LuceneContribQuery.dtd.html#SpanNot',false,false)
 eltTree.linkNodes('67','68')
-eltTree.addNode('69','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('67','69')
-eltTree.linkNodes('69','6','<b>BooleanQuery</b>')
-eltTree.linkNodes('69','12','<b>UserQuery</b>')
-eltTree.linkNodes('69','15','<b>FilteredQuery</b>')
-eltTree.linkNodes('69','19','<b>TermQuery</b>')
-eltTree.linkNodes('69','22','<b>TermsQuery</b>')
-eltTree.linkNodes('69','27','<b>MatchAllDocsQuery</b>')
-eltTree.linkNodes('69','28','<b>ConstantScoreQuery</b>')
-eltTree.linkNodes('69','39','<b>SpanOr</b>')
-eltTree.linkNodes('69','41','<b>SpanNear</b>')
-eltTree.linkNodes('69','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('69','47','<b>SpanFirst</b>')
-eltTree.linkNodes('69','51','<b>SpanNot</b>')
-eltTree.linkNodes('69','54','<b>SpanTerm</b>')
-eltTree.linkNodes('69','58','<b>LikeThisQuery</b>')
-eltTree.linkNodes('69','65','<b>BoostingQuery</b>')
-eltTree.addNode('70','<b>FuzzyLikeThisQuery</b>','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery',false,false)
+eltTree.addNode('69','<b>Include</b>','LuceneContribQuery.dtd.html#Include',false,false)
+eltTree.linkNodes('68','69')
+eltTree.addNode('70','<b><i>&lt;choice&gt;</i></b>',null,true,false)
 eltTree.linkNodes('69','70')
-eltTree.addNode('71','@boost','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_boost',false,false)
+eltTree.linkNodes('70','56','<b>SpanOr</b>')
+eltTree.linkNodes('70','58','<b>SpanNear</b>')
+eltTree.linkNodes('70','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('70','64','<b>SpanFirst</b>')
+eltTree.linkNodes('70','68','<b>SpanNot</b>')
+eltTree.addNode('71','<b>SpanTerm</b>','LuceneContribQuery.dtd.html#SpanTerm',false,false)
 eltTree.linkNodes('70','71')
-eltTree.addNode('72','@ignoreTF','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_ignoreTF',false,false)
-eltTree.linkNodes('70','72')
-eltTree.addNode('73','@maxNumTerms','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_maxNumTerms',false,false)
-eltTree.linkNodes('70','73')
-eltTree.addNode('74','<i>&lt;sequence&gt;*</i>',null,true,false)
-eltTree.linkNodes('70','74')
-eltTree.addNode('75','<b>Field</b>','LuceneContribQuery.dtd.html#Field',false,false)
-eltTree.linkNodes('74','75')
-eltTree.addNode('76','@fieldName','LuceneContribQuery.dtd.html#Field_fieldName',false,false)
+eltTree.addNode('72','<b>@fieldName</b>','LuceneContribQuery.dtd.html#SpanTerm_fieldName',false,false)
+eltTree.linkNodes('71','72')
+eltTree.linkNodes('70','47','<b>BoostingTermQuery</b>')
+eltTree.addNode('73','<b>Exclude</b>','LuceneContribQuery.dtd.html#Exclude',false,false)
+eltTree.linkNodes('68','73')
+eltTree.addNode('74','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('73','74')
+eltTree.linkNodes('74','56','<b>SpanOr</b>')
+eltTree.linkNodes('74','58','<b>SpanNear</b>')
+eltTree.linkNodes('74','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('74','64','<b>SpanFirst</b>')
+eltTree.linkNodes('74','68','<b>SpanNot</b>')
+eltTree.linkNodes('74','71','<b>SpanTerm</b>')
+eltTree.linkNodes('74','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('67','71','<b>SpanTerm</b>')
+eltTree.linkNodes('67','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('61','68','<b>SpanNot</b>')
+eltTree.linkNodes('61','71','<b>SpanTerm</b>')
+eltTree.linkNodes('61','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('57','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('57','64','<b>SpanFirst</b>')
+eltTree.linkNodes('57','68','<b>SpanNot</b>')
+eltTree.linkNodes('57','71','<b>SpanTerm</b>')
+eltTree.linkNodes('57','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('46','58','<b>SpanNear</b>')
+eltTree.linkNodes('46','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('46','64','<b>SpanFirst</b>')
+eltTree.linkNodes('46','68','<b>SpanNot</b>')
+eltTree.linkNodes('46','71','<b>SpanTerm</b>')
+eltTree.linkNodes('46','47','<b>BoostingTermQuery</b>')
+eltTree.addNode('75','<b>LikeThisQuery</b>','LuceneContribQuery.dtd.html#LikeThisQuery',false,false)
+eltTree.linkNodes('46','75')
+eltTree.addNode('76','@boost','LuceneContribQuery.dtd.html#LikeThisQuery_boost',false,false)
 eltTree.linkNodes('75','76')
-eltTree.addNode('77','@minSimilarity','LuceneContribQuery.dtd.html#Field_minSimilarity',false,false)
+eltTree.addNode('77','@fieldNames','LuceneContribQuery.dtd.html#LikeThisQuery_fieldNames',false,false)
 eltTree.linkNodes('75','77')
-eltTree.addNode('78','@prefixLength','LuceneContribQuery.dtd.html#Field_prefixLength',false,false)
+eltTree.addNode('78','@maxQueryTerms','LuceneContribQuery.dtd.html#LikeThisQuery_maxQueryTerms',false,false)
 eltTree.linkNodes('75','78')
-eltTree.linkNodes('38','70','<b>FuzzyLikeThisQuery</b>')
-eltTree.linkNodes('38','31','<b>RangeFilter</b>')
-eltTree.linkNodes('38','37','<b>CachedFilter</b>')
-eltTree.addNode('79','<b>TermsFilter</b>','LuceneContribQuery.dtd.html#TermsFilter',false,false)
-eltTree.linkNodes('38','79')
-eltTree.addNode('80','@fieldName','LuceneContribQuery.dtd.html#TermsFilter_fieldName',false,false)
-eltTree.linkNodes('79','80')
-eltTree.linkNodes('38','1','<b>BooleanFilter</b>')
-eltTree.addNode('81','<b>&lt;DuplicateFilter/&gt;</b>','LuceneContribQuery.dtd.html#DuplicateFilter',false,false)
-eltTree.linkNodes('38','81')
-eltTree.addNode('82','@fieldName','LuceneContribQuery.dtd.html#DuplicateFilter_fieldName',false,false)
-eltTree.linkNodes('81','82')
-eltTree.addNode('83','@keepMode','LuceneContribQuery.dtd.html#DuplicateFilter_keepMode',false,false)
-eltTree.linkNodes('81','83')
-eltTree.addNode('84','@processingMode','LuceneContribQuery.dtd.html#DuplicateFilter_processingMode',false,false)
-eltTree.linkNodes('81','84')
-eltTree.linkNodes('30','79','<b>TermsFilter</b>')
-eltTree.linkNodes('30','1','<b>BooleanFilter</b>')
-eltTree.linkNodes('30','81','<b>DuplicateFilter</b>')
-eltTree.linkNodes('18','39','<b>SpanOr</b>')
-eltTree.linkNodes('18','41','<b>SpanNear</b>')
-eltTree.linkNodes('18','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('18','47','<b>SpanFirst</b>')
-eltTree.linkNodes('18','51','<b>SpanNot</b>')
-eltTree.linkNodes('18','54','<b>SpanTerm</b>')
-eltTree.linkNodes('18','58','<b>LikeThisQuery</b>')
-eltTree.linkNodes('18','65','<b>BoostingQuery</b>')
-eltTree.linkNodes('18','70','<b>FuzzyLikeThisQuery</b>')
-eltTree.addNode('85','<b>Filter</b>','LuceneContribQuery.dtd.html#Filter',false,false)
-eltTree.linkNodes('15','85')
+eltTree.addNode('79','@minTermFrequency','LuceneContribQuery.dtd.html#LikeThisQuery_minTermFrequency',false,false)
+eltTree.linkNodes('75','79')
+eltTree.addNode('80','@percentTermsToMatch','LuceneContribQuery.dtd.html#LikeThisQuery_percentTermsToMatch',false,false)
+eltTree.linkNodes('75','80')
+eltTree.addNode('81','@stopWords','LuceneContribQuery.dtd.html#LikeThisQuery_stopWords',false,false)
+eltTree.linkNodes('75','81')
+eltTree.addNode('82','<b>BoostingQuery</b>','LuceneContribQuery.dtd.html#BoostingQuery',false,false)
+eltTree.linkNodes('46','82')
+eltTree.addNode('83','@boost','LuceneContribQuery.dtd.html#BoostingQuery_boost',false,false)
+eltTree.linkNodes('82','83')
+eltTree.linkNodes('82','17','<b>Query</b>')
+eltTree.addNode('84','<b>BoostQuery</b>','LuceneContribQuery.dtd.html#BoostQuery',false,false)
+eltTree.linkNodes('82','84')
+eltTree.addNode('85','@boost','LuceneContribQuery.dtd.html#BoostQuery_boost',false,false)
+eltTree.linkNodes('84','85')
 eltTree.addNode('86','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('85','86')
-eltTree.linkNodes('86','31','<b>RangeFilter</b>')
-eltTree.linkNodes('86','37','<b>CachedFilter</b>')
-eltTree.linkNodes('86','79','<b>TermsFilter</b>')
-eltTree.linkNodes('86','1','<b>BooleanFilter</b>')
-eltTree.linkNodes('86','81','<b>DuplicateFilter</b>')
+eltTree.linkNodes('84','86')
+eltTree.linkNodes('86','6','<b>BooleanQuery</b>')
+eltTree.linkNodes('86','12','<b>UserQuery</b>')
+eltTree.linkNodes('86','15','<b>FilteredQuery</b>')
+eltTree.linkNodes('86','19','<b>TermQuery</b>')
+eltTree.linkNodes('86','22','<b>TermsQuery</b>')
+eltTree.linkNodes('86','27','<b>MatchAllDocsQuery</b>')
+eltTree.linkNodes('86','28','<b>ConstantScoreQuery</b>')
+eltTree.linkNodes('86','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('86','48','<b>NumericRangeQuery</b>')
+eltTree.linkNodes('86','56','<b>SpanOr</b>')
+eltTree.linkNodes('86','58','<b>SpanNear</b>')
+eltTree.linkNodes('86','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('86','64','<b>SpanFirst</b>')
+eltTree.linkNodes('86','68','<b>SpanNot</b>')
+eltTree.linkNodes('86','71','<b>SpanTerm</b>')
+eltTree.linkNodes('86','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('86','75','<b>LikeThisQuery</b>')
+eltTree.linkNodes('86','82','<b>BoostingQuery</b>')
+eltTree.addNode('87','<b>FuzzyLikeThisQuery</b>','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery',false,false)
+eltTree.linkNodes('86','87')
+eltTree.addNode('88','@boost','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_boost',false,false)
+eltTree.linkNodes('87','88')
+eltTree.addNode('89','@ignoreTF','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_ignoreTF',false,false)
+eltTree.linkNodes('87','89')
+eltTree.addNode('90','@maxNumTerms','LuceneContribQuery.dtd.html#FuzzyLikeThisQuery_maxNumTerms',false,false)
+eltTree.linkNodes('87','90')
+eltTree.addNode('91','<i>&lt;sequence&gt;*</i>',null,true,false)
+eltTree.linkNodes('87','91')
+eltTree.addNode('92','<b>Field</b>','LuceneContribQuery.dtd.html#Field',false,false)
+eltTree.linkNodes('91','92')
+eltTree.addNode('93','@fieldName','LuceneContribQuery.dtd.html#Field_fieldName',false,false)
+eltTree.linkNodes('92','93')
+eltTree.addNode('94','@minSimilarity','LuceneContribQuery.dtd.html#Field_minSimilarity',false,false)
+eltTree.linkNodes('92','94')
+eltTree.addNode('95','@prefixLength','LuceneContribQuery.dtd.html#Field_prefixLength',false,false)
+eltTree.linkNodes('92','95')
+eltTree.linkNodes('46','87','<b>FuzzyLikeThisQuery</b>')
+eltTree.linkNodes('46','31','<b>RangeFilter</b>')
+eltTree.linkNodes('46','37','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('46','45','<b>CachedFilter</b>')
+eltTree.addNode('96','<b>TermsFilter</b>','LuceneContribQuery.dtd.html#TermsFilter',false,false)
+eltTree.linkNodes('46','96')
+eltTree.addNode('97','@fieldName','LuceneContribQuery.dtd.html#TermsFilter_fieldName',false,false)
+eltTree.linkNodes('96','97')
+eltTree.linkNodes('46','1','<b>BooleanFilter</b>')
+eltTree.addNode('98','<b>&lt;DuplicateFilter/&gt;</b>','LuceneContribQuery.dtd.html#DuplicateFilter',false,false)
+eltTree.linkNodes('46','98')
+eltTree.addNode('99','@fieldName','LuceneContribQuery.dtd.html#DuplicateFilter_fieldName',false,false)
+eltTree.linkNodes('98','99')
+eltTree.addNode('100','@keepMode','LuceneContribQuery.dtd.html#DuplicateFilter_keepMode',false,false)
+eltTree.linkNodes('98','100')
+eltTree.addNode('101','@processingMode','LuceneContribQuery.dtd.html#DuplicateFilter_processingMode',false,false)
+eltTree.linkNodes('98','101')
+eltTree.linkNodes('30','96','<b>TermsFilter</b>')
+eltTree.linkNodes('30','1','<b>BooleanFilter</b>')
+eltTree.linkNodes('30','98','<b>DuplicateFilter</b>')
+eltTree.linkNodes('18','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('18','48','<b>NumericRangeQuery</b>')
+eltTree.linkNodes('18','56','<b>SpanOr</b>')
+eltTree.linkNodes('18','58','<b>SpanNear</b>')
+eltTree.linkNodes('18','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('18','64','<b>SpanFirst</b>')
+eltTree.linkNodes('18','68','<b>SpanNot</b>')
+eltTree.linkNodes('18','71','<b>SpanTerm</b>')
+eltTree.linkNodes('18','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('18','75','<b>LikeThisQuery</b>')
+eltTree.linkNodes('18','82','<b>BoostingQuery</b>')
+eltTree.linkNodes('18','87','<b>FuzzyLikeThisQuery</b>')
+eltTree.addNode('102','<b>Filter</b>','LuceneContribQuery.dtd.html#Filter',false,false)
+eltTree.linkNodes('15','102')
+eltTree.addNode('103','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('102','103')
+eltTree.linkNodes('103','31','<b>RangeFilter</b>')
+eltTree.linkNodes('103','37','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('103','45','<b>CachedFilter</b>')
+eltTree.linkNodes('103','96','<b>TermsFilter</b>')
+eltTree.linkNodes('103','1','<b>BooleanFilter</b>')
+eltTree.linkNodes('103','98','<b>DuplicateFilter</b>')
 eltTree.linkNodes('5','19','<b>TermQuery</b>')
 eltTree.linkNodes('5','22','<b>TermsQuery</b>')
 eltTree.linkNodes('5','27','<b>MatchAllDocsQuery</b>')
 eltTree.linkNodes('5','28','<b>ConstantScoreQuery</b>')
-eltTree.linkNodes('5','39','<b>SpanOr</b>')
-eltTree.linkNodes('5','41','<b>SpanNear</b>')
-eltTree.linkNodes('5','45','<b>SpanOrTerms</b>')
-eltTree.linkNodes('5','47','<b>SpanFirst</b>')
-eltTree.linkNodes('5','51','<b>SpanNot</b>')
-eltTree.linkNodes('5','54','<b>SpanTerm</b>')
-eltTree.linkNodes('5','58','<b>LikeThisQuery</b>')
-eltTree.linkNodes('5','65','<b>BoostingQuery</b>')
-eltTree.linkNodes('5','70','<b>FuzzyLikeThisQuery</b>')
+eltTree.linkNodes('5','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('5','48','<b>NumericRangeQuery</b>')
+eltTree.linkNodes('5','56','<b>SpanOr</b>')
+eltTree.linkNodes('5','58','<b>SpanNear</b>')
+eltTree.linkNodes('5','62','<b>SpanOrTerms</b>')
+eltTree.linkNodes('5','64','<b>SpanFirst</b>')
+eltTree.linkNodes('5','68','<b>SpanNot</b>')
+eltTree.linkNodes('5','71','<b>SpanTerm</b>')
+eltTree.linkNodes('5','47','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('5','75','<b>LikeThisQuery</b>')
+eltTree.linkNodes('5','82','<b>BoostingQuery</b>')
+eltTree.linkNodes('5','87','<b>FuzzyLikeThisQuery</b>')
 eltTree.linkNodes('5','31','<b>RangeFilter</b>')
-eltTree.linkNodes('5','37','<b>CachedFilter</b>')
-eltTree.linkNodes('5','79','<b>TermsFilter</b>')
+eltTree.linkNodes('5','37','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('5','45','<b>CachedFilter</b>')
+eltTree.linkNodes('5','96','<b>TermsFilter</b>')
 eltTree.linkNodes('5','1','<b>BooleanFilter</b>')
-eltTree.linkNodes('5','81','<b>DuplicateFilter</b>')
+eltTree.linkNodes('5','98','<b>DuplicateFilter</b>')
 eltTree.linkNodes('0','6','BooleanQuery')
-eltTree.linkNodes('0','65','BoostingQuery')
-eltTree.linkNodes('0','67','BoostQuery')
-eltTree.linkNodes('0','37','CachedFilter')
+eltTree.linkNodes('0','82','BoostingQuery')
+eltTree.linkNodes('0','47','BoostingTermQuery')
+eltTree.linkNodes('0','84','BoostQuery')
+eltTree.linkNodes('0','45','CachedFilter')
 eltTree.linkNodes('0','3','Clause')
 eltTree.linkNodes('0','28','ConstantScoreQuery')
-eltTree.linkNodes('0','81','DuplicateFilter')
-eltTree.linkNodes('0','56','Exclude')
-eltTree.linkNodes('0','75','Field')
-eltTree.linkNodes('0','85','Filter')
+eltTree.linkNodes('0','98','DuplicateFilter')
+eltTree.linkNodes('0','73','Exclude')
+eltTree.linkNodes('0','92','Field')
+eltTree.linkNodes('0','102','Filter')
 eltTree.linkNodes('0','15','FilteredQuery')
-eltTree.linkNodes('0','70','FuzzyLikeThisQuery')
-eltTree.linkNodes('0','52','Include')
-eltTree.linkNodes('0','58','LikeThisQuery')
+eltTree.linkNodes('0','87','FuzzyLikeThisQuery')
+eltTree.linkNodes('0','69','Include')
+eltTree.linkNodes('0','75','LikeThisQuery')
 eltTree.linkNodes('0','27','MatchAllDocsQuery')
+eltTree.linkNodes('0','37','NumericRangeFilter')
+eltTree.linkNodes('0','48','NumericRangeQuery')
 eltTree.linkNodes('0','17','Query')
 eltTree.linkNodes('0','31','RangeFilter')
-eltTree.linkNodes('0','47','SpanFirst')
-eltTree.linkNodes('0','41','SpanNear')
-eltTree.linkNodes('0','51','SpanNot')
-eltTree.linkNodes('0','39','SpanOr')
-eltTree.linkNodes('0','45','SpanOrTerms')
-eltTree.linkNodes('0','54','SpanTerm')
+eltTree.linkNodes('0','64','SpanFirst')
+eltTree.linkNodes('0','58','SpanNear')
+eltTree.linkNodes('0','68','SpanNot')
+eltTree.linkNodes('0','56','SpanOr')
+eltTree.linkNodes('0','62','SpanOrTerms')
+eltTree.linkNodes('0','71','SpanTerm')
 eltTree.linkNodes('0','19','TermQuery')
-eltTree.linkNodes('0','79','TermsFilter')
+eltTree.linkNodes('0','96','TermsFilter')
 eltTree.linkNodes('0','22','TermsQuery')
 eltTree.linkNodes('0','12','UserQuery')
-eltTree.addRootNode('87','Core Lucene','LuceneCoreQuery.dtd.html',false,false)
-eltTree.addNode('88','BooleanQuery','LuceneCoreQuery.dtd.html#BooleanQuery',false,false)
-eltTree.linkNodes('87','88')
-eltTree.addNode('89','@boost','LuceneCoreQuery.dtd.html#BooleanQuery_boost',false,false)
-eltTree.linkNodes('88','89')
-eltTree.addNode('90','@disableCoord','LuceneCoreQuery.dtd.html#BooleanQuery_disableCoord',false,false)
-eltTree.linkNodes('88','90')
-eltTree.addNode('91','@fieldName','LuceneCoreQuery.dtd.html#BooleanQuery_fieldName',false,false)
-eltTree.linkNodes('88','91')
-eltTree.addNode('92','@minimumNumberShouldMatch','LuceneCoreQuery.dtd.html#BooleanQuery_minimumNumberShouldMatch',false,false)
-eltTree.linkNodes('88','92')
-eltTree.addNode('93','<b><i>&lt;sequence&gt;+</i></b>',null,true,false)
-eltTree.linkNodes('88','93')
-eltTree.addNode('94','<b>Clause</b>','LuceneCoreQuery.dtd.html#Clause',false,false)
-eltTree.linkNodes('93','94')
-eltTree.addNode('95','@occurs','LuceneCoreQuery.dtd.html#Clause_occurs',false,false)
-eltTree.linkNodes('94','95')
-eltTree.addNode('96','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('94','96')
-eltTree.linkNodes('96','88','<b>BooleanQuery</b>')
-eltTree.addNode('97','<b>UserQuery</b>','LuceneCoreQuery.dtd.html#UserQuery',false,false)
-eltTree.linkNodes('96','97')
-eltTree.addNode('98','@boost','LuceneCoreQuery.dtd.html#UserQuery_boost',false,false)
-eltTree.linkNodes('97','98')
-eltTree.addNode('99','@fieldName','LuceneCoreQuery.dtd.html#UserQuery_fieldName',false,false)
-eltTree.linkNodes('97','99')
-eltTree.addNode('100','<b>FilteredQuery</b>','LuceneCoreQuery.dtd.html#FilteredQuery',false,false)
-eltTree.linkNodes('96','100')
-eltTree.addNode('101','@boost','LuceneCoreQuery.dtd.html#FilteredQuery_boost',false,false)
-eltTree.linkNodes('100','101')
-eltTree.addNode('102','<b>Query</b>','LuceneCoreQuery.dtd.html#Query',false,false)
-eltTree.linkNodes('100','102')
-eltTree.addNode('103','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('102','103')
-eltTree.linkNodes('103','88','<b>BooleanQuery</b>')
-eltTree.linkNodes('103','97','<b>UserQuery</b>')
-eltTree.linkNodes('103','100','<b>FilteredQuery</b>')
-eltTree.addNode('104','<b>TermQuery</b>','LuceneCoreQuery.dtd.html#TermQuery',false,false)
-eltTree.linkNodes('103','104')
-eltTree.addNode('105','@boost','LuceneCoreQuery.dtd.html#TermQuery_boost',false,false)
+eltTree.addRootNode('104','Core Lucene','LuceneCoreQuery.dtd.html',false,false)
+eltTree.addNode('105','BooleanQuery','LuceneCoreQuery.dtd.html#BooleanQuery',false,false)
 eltTree.linkNodes('104','105')
-eltTree.addNode('106','@fieldName','LuceneCoreQuery.dtd.html#TermQuery_fieldName',false,false)
-eltTree.linkNodes('104','106')
-eltTree.addNode('107','<b>TermsQuery</b>','LuceneCoreQuery.dtd.html#TermsQuery',false,false)
-eltTree.linkNodes('103','107')
-eltTree.addNode('108','@boost','LuceneCoreQuery.dtd.html#TermsQuery_boost',false,false)
-eltTree.linkNodes('107','108')
-eltTree.addNode('109','@disableCoord','LuceneCoreQuery.dtd.html#TermsQuery_disableCoord',false,false)
-eltTree.linkNodes('107','109')
-eltTree.addNode('110','@fieldName','LuceneCoreQuery.dtd.html#TermsQuery_fieldName',false,false)
-eltTree.linkNodes('107','110')
-eltTree.addNode('111','@minimumNumberShouldMatch','LuceneCoreQuery.dtd.html#TermsQuery_minimumNumberShouldMatch',false,false)
-eltTree.linkNodes('107','111')
-eltTree.addNode('112','<b>&lt;MatchAllDocsQuery/&gt;</b>','LuceneCoreQuery.dtd.html#MatchAllDocsQuery',false,false)
-eltTree.linkNodes('103','112')
-eltTree.addNode('113','<b>ConstantScoreQuery</b>','LuceneCoreQuery.dtd.html#ConstantScoreQuery',false,false)
-eltTree.linkNodes('103','113')
-eltTree.addNode('114','@boost','LuceneCoreQuery.dtd.html#ConstantScoreQuery_boost',false,false)
+eltTree.addNode('106','@boost','LuceneCoreQuery.dtd.html#BooleanQuery_boost',false,false)
+eltTree.linkNodes('105','106')
+eltTree.addNode('107','@disableCoord','LuceneCoreQuery.dtd.html#BooleanQuery_disableCoord',false,false)
+eltTree.linkNodes('105','107')
+eltTree.addNode('108','@fieldName','LuceneCoreQuery.dtd.html#BooleanQuery_fieldName',false,false)
+eltTree.linkNodes('105','108')
+eltTree.addNode('109','@minimumNumberShouldMatch','LuceneCoreQuery.dtd.html#BooleanQuery_minimumNumberShouldMatch',false,false)
+eltTree.linkNodes('105','109')
+eltTree.addNode('110','<b><i>&lt;sequence&gt;+</i></b>',null,true,false)
+eltTree.linkNodes('105','110')
+eltTree.addNode('111','<b>Clause</b>','LuceneCoreQuery.dtd.html#Clause',false,false)
+eltTree.linkNodes('110','111')
+eltTree.addNode('112','@occurs','LuceneCoreQuery.dtd.html#Clause_occurs',false,false)
+eltTree.linkNodes('111','112')
+eltTree.addNode('113','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('111','113')
+eltTree.linkNodes('113','105','<b>BooleanQuery</b>')
+eltTree.addNode('114','<b>UserQuery</b>','LuceneCoreQuery.dtd.html#UserQuery',false,false)
 eltTree.linkNodes('113','114')
-eltTree.addNode('115','<i>&lt;choice&gt;*</i>',null,true,false)
-eltTree.linkNodes('113','115')
-eltTree.addNode('116','<b>&lt;RangeFilter/&gt;</b>','LuceneCoreQuery.dtd.html#RangeFilter',false,false)
-eltTree.linkNodes('115','116')
-eltTree.addNode('117','@fieldName','LuceneCoreQuery.dtd.html#RangeFilter_fieldName',false,false)
-eltTree.linkNodes('116','117')
-eltTree.addNode('118','@includeLower','LuceneCoreQuery.dtd.html#RangeFilter_includeLower',false,false)
-eltTree.linkNodes('116','118')
-eltTree.addNode('119','@includeUpper','LuceneCoreQuery.dtd.html#RangeFilter_includeUpper',false,false)
-eltTree.linkNodes('116','119')
-eltTree.addNode('120','<b>@lowerTerm</b>','LuceneCoreQuery.dtd.html#RangeFilter_lowerTerm',false,false)
-eltTree.linkNodes('116','120')
-eltTree.addNode('121','<b>@upperTerm</b>','LuceneCoreQuery.dtd.html#RangeFilter_upperTerm',false,false)
-eltTree.linkNodes('116','121')
-eltTree.addNode('122','<b>CachedFilter</b>','LuceneCoreQuery.dtd.html#CachedFilter',false,false)
-eltTree.linkNodes('115','122')
-eltTree.addNode('123','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('122','123')
-eltTree.linkNodes('123','88','<b>BooleanQuery</b>')
-eltTree.linkNodes('123','97','<b>UserQuery</b>')
-eltTree.linkNodes('123','100','<b>FilteredQuery</b>')
-eltTree.linkNodes('123','104','<b>TermQuery</b>')
-eltTree.linkNodes('123','107','<b>TermsQuery</b>')
-eltTree.linkNodes('123','112','<b>MatchAllDocsQuery</b>')
-eltTree.linkNodes('123','113','<b>ConstantScoreQuery</b>')
-eltTree.addNode('124','<b>SpanOr</b>','LuceneCoreQuery.dtd.html#SpanOr',false,false)
-eltTree.linkNodes('123','124')
-eltTree.addNode('125','<i>&lt;choice&gt;*</i>',null,true,false)
+eltTree.addNode('115','@boost','LuceneCoreQuery.dtd.html#UserQuery_boost',false,false)
+eltTree.linkNodes('114','115')
+eltTree.addNode('116','@fieldName','LuceneCoreQuery.dtd.html#UserQuery_fieldName',false,false)
+eltTree.linkNodes('114','116')
+eltTree.addNode('117','<b>FilteredQuery</b>','LuceneCoreQuery.dtd.html#FilteredQuery',false,false)
+eltTree.linkNodes('113','117')
+eltTree.addNode('118','@boost','LuceneCoreQuery.dtd.html#FilteredQuery_boost',false,false)
+eltTree.linkNodes('117','118')
+eltTree.addNode('119','<b>Query</b>','LuceneCoreQuery.dtd.html#Query',false,false)
+eltTree.linkNodes('117','119')
+eltTree.addNode('120','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('119','120')
+eltTree.linkNodes('120','105','<b>BooleanQuery</b>')
+eltTree.linkNodes('120','114','<b>UserQuery</b>')
+eltTree.linkNodes('120','117','<b>FilteredQuery</b>')
+eltTree.addNode('121','<b>TermQuery</b>','LuceneCoreQuery.dtd.html#TermQuery',false,false)
+eltTree.linkNodes('120','121')
+eltTree.addNode('122','@boost','LuceneCoreQuery.dtd.html#TermQuery_boost',false,false)
+eltTree.linkNodes('121','122')
+eltTree.addNode('123','@fieldName','LuceneCoreQuery.dtd.html#TermQuery_fieldName',false,false)
+eltTree.linkNodes('121','123')
+eltTree.addNode('124','<b>TermsQuery</b>','LuceneCoreQuery.dtd.html#TermsQuery',false,false)
+eltTree.linkNodes('120','124')
+eltTree.addNode('125','@boost','LuceneCoreQuery.dtd.html#TermsQuery_boost',false,false)
 eltTree.linkNodes('124','125')
-eltTree.linkNodes('125','124','<b>SpanOr</b>')
-eltTree.addNode('126','<b>SpanNear</b>','LuceneCoreQuery.dtd.html#SpanNear',false,false)
-eltTree.linkNodes('125','126')
-eltTree.addNode('127','@inOrder','LuceneCoreQuery.dtd.html#SpanNear_inOrder',false,false)
-eltTree.linkNodes('126','127')
-eltTree.addNode('128','<b>@slop</b>','LuceneCoreQuery.dtd.html#SpanNear_slop',false,false)
-eltTree.linkNodes('126','128')
-eltTree.addNode('129','<i>&lt;choice&gt;*</i>',null,true,false)
-eltTree.linkNodes('126','129')
-eltTree.linkNodes('129','124','<b>SpanOr</b>')
-eltTree.linkNodes('129','126','<b>SpanNear</b>')
-eltTree.addNode('130','<b>SpanOrTerms</b>','LuceneCoreQuery.dtd.html#SpanOrTerms',false,false)
-eltTree.linkNodes('129','130')
-eltTree.addNode('131','<b>@fieldName</b>','LuceneCoreQuery.dtd.html#SpanOrTerms_fieldName',false,false)
+eltTree.addNode('126','@disableCoord','LuceneCoreQuery.dtd.html#TermsQuery_disableCoord',false,false)
+eltTree.linkNodes('124','126')
+eltTree.addNode('127','@fieldName','LuceneCoreQuery.dtd.html#TermsQuery_fieldName',false,false)
+eltTree.linkNodes('124','127')
+eltTree.addNode('128','@minimumNumberShouldMatch','LuceneCoreQuery.dtd.html#TermsQuery_minimumNumberShouldMatch',false,false)
+eltTree.linkNodes('124','128')
+eltTree.addNode('129','<b>&lt;MatchAllDocsQuery/&gt;</b>','LuceneCoreQuery.dtd.html#MatchAllDocsQuery',false,false)
+eltTree.linkNodes('120','129')
+eltTree.addNode('130','<b>ConstantScoreQuery</b>','LuceneCoreQuery.dtd.html#ConstantScoreQuery',false,false)
+eltTree.linkNodes('120','130')
+eltTree.addNode('131','@boost','LuceneCoreQuery.dtd.html#ConstantScoreQuery_boost',false,false)
 eltTree.linkNodes('130','131')
-eltTree.addNode('132','<b>SpanFirst</b>','LuceneCoreQuery.dtd.html#SpanFirst',false,false)
-eltTree.linkNodes('129','132')
-eltTree.addNode('133','@boost','LuceneCoreQuery.dtd.html#SpanFirst_boost',false,false)
+eltTree.addNode('132','<i>&lt;choice&gt;*</i>',null,true,false)
+eltTree.linkNodes('130','132')
+eltTree.addNode('133','<b>&lt;RangeFilter/&gt;</b>','LuceneCoreQuery.dtd.html#RangeFilter',false,false)
 eltTree.linkNodes('132','133')
-eltTree.addNode('134','<b>@end</b>','LuceneCoreQuery.dtd.html#SpanFirst_end',false,false)
-eltTree.linkNodes('132','134')
-eltTree.addNode('135','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('132','135')
-eltTree.linkNodes('135','124','<b>SpanOr</b>')
-eltTree.linkNodes('135','126','<b>SpanNear</b>')
-eltTree.linkNodes('135','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('135','132','<b>SpanFirst</b>')
-eltTree.addNode('136','<b>SpanNot</b>','LuceneCoreQuery.dtd.html#SpanNot',false,false)
-eltTree.linkNodes('135','136')
-eltTree.addNode('137','<b>Include</b>','LuceneCoreQuery.dtd.html#Include',false,false)
-eltTree.linkNodes('136','137')
-eltTree.addNode('138','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('137','138')
-eltTree.linkNodes('138','124','<b>SpanOr</b>')
-eltTree.linkNodes('138','126','<b>SpanNear</b>')
-eltTree.linkNodes('138','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('138','132','<b>SpanFirst</b>')
-eltTree.linkNodes('138','136','<b>SpanNot</b>')
-eltTree.addNode('139','<b>SpanTerm</b>','LuceneCoreQuery.dtd.html#SpanTerm',false,false)
-eltTree.linkNodes('138','139')
-eltTree.addNode('140','<b>@fieldName</b>','LuceneCoreQuery.dtd.html#SpanTerm_fieldName',false,false)
+eltTree.addNode('134','@fieldName','LuceneCoreQuery.dtd.html#RangeFilter_fieldName',false,false)
+eltTree.linkNodes('133','134')
+eltTree.addNode('135','@includeLower','LuceneCoreQuery.dtd.html#RangeFilter_includeLower',false,false)
+eltTree.linkNodes('133','135')
+eltTree.addNode('136','@includeUpper','LuceneCoreQuery.dtd.html#RangeFilter_includeUpper',false,false)
+eltTree.linkNodes('133','136')
+eltTree.addNode('137','<b>@lowerTerm</b>','LuceneCoreQuery.dtd.html#RangeFilter_lowerTerm',false,false)
+eltTree.linkNodes('133','137')
+eltTree.addNode('138','<b>@upperTerm</b>','LuceneCoreQuery.dtd.html#RangeFilter_upperTerm',false,false)
+eltTree.linkNodes('133','138')
+eltTree.addNode('139','<b>&lt;NumericRangeFilter/&gt;</b>','LuceneCoreQuery.dtd.html#NumericRangeFilter',false,false)
+eltTree.linkNodes('132','139')
+eltTree.addNode('140','@fieldName','LuceneCoreQuery.dtd.html#NumericRangeFilter_fieldName',false,false)
 eltTree.linkNodes('139','140')
-eltTree.addNode('141','<b>Exclude</b>','LuceneCoreQuery.dtd.html#Exclude',false,false)
-eltTree.linkNodes('136','141')
-eltTree.addNode('142','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('141','142')
-eltTree.linkNodes('142','124','<b>SpanOr</b>')
-eltTree.linkNodes('142','126','<b>SpanNear</b>')
-eltTree.linkNodes('142','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('142','132','<b>SpanFirst</b>')
-eltTree.linkNodes('142','136','<b>SpanNot</b>')
-eltTree.linkNodes('142','139','<b>SpanTerm</b>')
-eltTree.linkNodes('135','139','<b>SpanTerm</b>')
-eltTree.linkNodes('129','136','<b>SpanNot</b>')
-eltTree.linkNodes('129','139','<b>SpanTerm</b>')
-eltTree.linkNodes('125','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('125','132','<b>SpanFirst</b>')
-eltTree.linkNodes('125','136','<b>SpanNot</b>')
-eltTree.linkNodes('125','139','<b>SpanTerm</b>')
-eltTree.linkNodes('123','126','<b>SpanNear</b>')
-eltTree.linkNodes('123','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('123','132','<b>SpanFirst</b>')
-eltTree.linkNodes('123','136','<b>SpanNot</b>')
-eltTree.linkNodes('123','139','<b>SpanTerm</b>')
-eltTree.linkNodes('123','116','<b>RangeFilter</b>')
-eltTree.linkNodes('123','122','<b>CachedFilter</b>')
-eltTree.linkNodes('103','124','<b>SpanOr</b>')
-eltTree.linkNodes('103','126','<b>SpanNear</b>')
-eltTree.linkNodes('103','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('103','132','<b>SpanFirst</b>')
-eltTree.linkNodes('103','136','<b>SpanNot</b>')
-eltTree.linkNodes('103','139','<b>SpanTerm</b>')
-eltTree.addNode('143','<b>Filter</b>','LuceneCoreQuery.dtd.html#Filter',false,false)
-eltTree.linkNodes('100','143')
-eltTree.addNode('144','<b><i>&lt;choice&gt;</i></b>',null,true,false)
-eltTree.linkNodes('143','144')
-eltTree.linkNodes('144','116','<b>RangeFilter</b>')
-eltTree.linkNodes('144','122','<b>CachedFilter</b>')
-eltTree.linkNodes('96','104','<b>TermQuery</b>')
-eltTree.linkNodes('96','107','<b>TermsQuery</b>')
-eltTree.linkNodes('96','112','<b>MatchAllDocsQuery</b>')
-eltTree.linkNodes('96','113','<b>ConstantScoreQuery</b>')
-eltTree.linkNodes('96','124','<b>SpanOr</b>')
-eltTree.linkNodes('96','126','<b>SpanNear</b>')
-eltTree.linkNodes('96','130','<b>SpanOrTerms</b>')
-eltTree.linkNodes('96','132','<b>SpanFirst</b>')
-eltTree.linkNodes('96','136','<b>SpanNot</b>')
-eltTree.linkNodes('96','139','<b>SpanTerm</b>')
-eltTree.linkNodes('96','116','<b>RangeFilter</b>')
-eltTree.linkNodes('96','122','<b>CachedFilter</b>')
-eltTree.linkNodes('87','122','CachedFilter')
-eltTree.linkNodes('87','94','Clause')
-eltTree.linkNodes('87','113','ConstantScoreQuery')
-eltTree.linkNodes('87','141','Exclude')
-eltTree.linkNodes('87','143','Filter')
-eltTree.linkNodes('87','100','FilteredQuery')
-eltTree.linkNodes('87','137','Include')
-eltTree.linkNodes('87','112','MatchAllDocsQuery')
-eltTree.linkNodes('87','102','Query')
-eltTree.linkNodes('87','116','RangeFilter')
-eltTree.linkNodes('87','132','SpanFirst')
-eltTree.linkNodes('87','126','SpanNear')
-eltTree.linkNodes('87','136','SpanNot')
-eltTree.linkNodes('87','124','SpanOr')
-eltTree.linkNodes('87','130','SpanOrTerms')
-eltTree.linkNodes('87','139','SpanTerm')
-eltTree.linkNodes('87','104','TermQuery')
-eltTree.linkNodes('87','107','TermsQuery')
-eltTree.linkNodes('87','97','UserQuery')
+eltTree.addNode('141','@includeLower','LuceneCoreQuery.dtd.html#NumericRangeFilter_includeLower',false,false)
+eltTree.linkNodes('139','141')
+eltTree.addNode('142','@includeUpper','LuceneCoreQuery.dtd.html#NumericRangeFilter_includeUpper',false,false)
+eltTree.linkNodes('139','142')
+eltTree.addNode('143','<b>@lowerTerm</b>','LuceneCoreQuery.dtd.html#NumericRangeFilter_lowerTerm',false,false)
+eltTree.linkNodes('139','143')
+eltTree.addNode('144','@precisionStep','LuceneCoreQuery.dtd.html#NumericRangeFilter_precisionStep',false,false)
+eltTree.linkNodes('139','144')
+eltTree.addNode('145','@type','LuceneCoreQuery.dtd.html#NumericRangeFilter_type',false,false)
+eltTree.linkNodes('139','145')
+eltTree.addNode('146','<b>@upperTerm</b>','LuceneCoreQuery.dtd.html#NumericRangeFilter_upperTerm',false,false)
+eltTree.linkNodes('139','146')
+eltTree.addNode('147','<b>CachedFilter</b>','LuceneCoreQuery.dtd.html#CachedFilter',false,false)
+eltTree.linkNodes('132','147')
+eltTree.addNode('148','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('147','148')
+eltTree.linkNodes('148','105','<b>BooleanQuery</b>')
+eltTree.linkNodes('148','114','<b>UserQuery</b>')
+eltTree.linkNodes('148','117','<b>FilteredQuery</b>')
+eltTree.linkNodes('148','121','<b>TermQuery</b>')
+eltTree.linkNodes('148','124','<b>TermsQuery</b>')
+eltTree.linkNodes('148','129','<b>MatchAllDocsQuery</b>')
+eltTree.linkNodes('148','130','<b>ConstantScoreQuery</b>')
+eltTree.addNode('149','<b>BoostingTermQuery</b>','LuceneCoreQuery.dtd.html#BoostingTermQuery',false,false)
+eltTree.linkNodes('148','149')
+eltTree.addNode('150','<b>&lt;NumericRangeQuery/&gt;</b>','LuceneCoreQuery.dtd.html#NumericRangeQuery',false,false)
+eltTree.linkNodes('148','150')
+eltTree.addNode('151','@fieldName','LuceneCoreQuery.dtd.html#NumericRangeQuery_fieldName',false,false)
+eltTree.linkNodes('150','151')
+eltTree.addNode('152','@includeLower','LuceneCoreQuery.dtd.html#NumericRangeQuery_includeLower',false,false)
+eltTree.linkNodes('150','152')
+eltTree.addNode('153','@includeUpper','LuceneCoreQuery.dtd.html#NumericRangeQuery_includeUpper',false,false)
+eltTree.linkNodes('150','153')
+eltTree.addNode('154','<b>@lowerTerm</b>','LuceneCoreQuery.dtd.html#NumericRangeQuery_lowerTerm',false,false)
+eltTree.linkNodes('150','154')
+eltTree.addNode('155','@precisionStep','LuceneCoreQuery.dtd.html#NumericRangeQuery_precisionStep',false,false)
+eltTree.linkNodes('150','155')
+eltTree.addNode('156','@type','LuceneCoreQuery.dtd.html#NumericRangeQuery_type',false,false)
+eltTree.linkNodes('150','156')
+eltTree.addNode('157','<b>@upperTerm</b>','LuceneCoreQuery.dtd.html#NumericRangeQuery_upperTerm',false,false)
+eltTree.linkNodes('150','157')
+eltTree.addNode('158','<b>SpanOr</b>','LuceneCoreQuery.dtd.html#SpanOr',false,false)
+eltTree.linkNodes('148','158')
+eltTree.addNode('159','<i>&lt;choice&gt;*</i>',null,true,false)
+eltTree.linkNodes('158','159')
+eltTree.linkNodes('159','158','<b>SpanOr</b>')
+eltTree.addNode('160','<b>SpanNear</b>','LuceneCoreQuery.dtd.html#SpanNear',false,false)
+eltTree.linkNodes('159','160')
+eltTree.addNode('161','@inOrder','LuceneCoreQuery.dtd.html#SpanNear_inOrder',false,false)
+eltTree.linkNodes('160','161')
+eltTree.addNode('162','<b>@slop</b>','LuceneCoreQuery.dtd.html#SpanNear_slop',false,false)
+eltTree.linkNodes('160','162')
+eltTree.addNode('163','<i>&lt;choice&gt;*</i>',null,true,false)
+eltTree.linkNodes('160','163')
+eltTree.linkNodes('163','158','<b>SpanOr</b>')
+eltTree.linkNodes('163','160','<b>SpanNear</b>')
+eltTree.addNode('164','<b>SpanOrTerms</b>','LuceneCoreQuery.dtd.html#SpanOrTerms',false,false)
+eltTree.linkNodes('163','164')
+eltTree.addNode('165','<b>@fieldName</b>','LuceneCoreQuery.dtd.html#SpanOrTerms_fieldName',false,false)
+eltTree.linkNodes('164','165')
+eltTree.addNode('166','<b>SpanFirst</b>','LuceneCoreQuery.dtd.html#SpanFirst',false,false)
+eltTree.linkNodes('163','166')
+eltTree.addNode('167','@boost','LuceneCoreQuery.dtd.html#SpanFirst_boost',false,false)
+eltTree.linkNodes('166','167')
+eltTree.addNode('168','<b>@end</b>','LuceneCoreQuery.dtd.html#SpanFirst_end',false,false)
+eltTree.linkNodes('166','168')
+eltTree.addNode('169','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('166','169')
+eltTree.linkNodes('169','158','<b>SpanOr</b>')
+eltTree.linkNodes('169','160','<b>SpanNear</b>')
+eltTree.linkNodes('169','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('169','166','<b>SpanFirst</b>')
+eltTree.addNode('170','<b>SpanNot</b>','LuceneCoreQuery.dtd.html#SpanNot',false,false)
+eltTree.linkNodes('169','170')
+eltTree.addNode('171','<b>Include</b>','LuceneCoreQuery.dtd.html#Include',false,false)
+eltTree.linkNodes('170','171')
+eltTree.addNode('172','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('171','172')
+eltTree.linkNodes('172','158','<b>SpanOr</b>')
+eltTree.linkNodes('172','160','<b>SpanNear</b>')
+eltTree.linkNodes('172','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('172','166','<b>SpanFirst</b>')
+eltTree.linkNodes('172','170','<b>SpanNot</b>')
+eltTree.addNode('173','<b>SpanTerm</b>','LuceneCoreQuery.dtd.html#SpanTerm',false,false)
+eltTree.linkNodes('172','173')
+eltTree.addNode('174','<b>@fieldName</b>','LuceneCoreQuery.dtd.html#SpanTerm_fieldName',false,false)
+eltTree.linkNodes('173','174')
+eltTree.linkNodes('172','149','<b>BoostingTermQuery</b>')
+eltTree.addNode('175','<b>Exclude</b>','LuceneCoreQuery.dtd.html#Exclude',false,false)
+eltTree.linkNodes('170','175')
+eltTree.addNode('176','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('175','176')
+eltTree.linkNodes('176','158','<b>SpanOr</b>')
+eltTree.linkNodes('176','160','<b>SpanNear</b>')
+eltTree.linkNodes('176','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('176','166','<b>SpanFirst</b>')
+eltTree.linkNodes('176','170','<b>SpanNot</b>')
+eltTree.linkNodes('176','173','<b>SpanTerm</b>')
+eltTree.linkNodes('176','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('169','173','<b>SpanTerm</b>')
+eltTree.linkNodes('169','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('163','170','<b>SpanNot</b>')
+eltTree.linkNodes('163','173','<b>SpanTerm</b>')
+eltTree.linkNodes('163','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('159','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('159','166','<b>SpanFirst</b>')
+eltTree.linkNodes('159','170','<b>SpanNot</b>')
+eltTree.linkNodes('159','173','<b>SpanTerm</b>')
+eltTree.linkNodes('159','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('148','160','<b>SpanNear</b>')
+eltTree.linkNodes('148','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('148','166','<b>SpanFirst</b>')
+eltTree.linkNodes('148','170','<b>SpanNot</b>')
+eltTree.linkNodes('148','173','<b>SpanTerm</b>')
+eltTree.linkNodes('148','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('148','133','<b>RangeFilter</b>')
+eltTree.linkNodes('148','139','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('148','147','<b>CachedFilter</b>')
+eltTree.linkNodes('120','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('120','150','<b>NumericRangeQuery</b>')
+eltTree.linkNodes('120','158','<b>SpanOr</b>')
+eltTree.linkNodes('120','160','<b>SpanNear</b>')
+eltTree.linkNodes('120','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('120','166','<b>SpanFirst</b>')
+eltTree.linkNodes('120','170','<b>SpanNot</b>')
+eltTree.linkNodes('120','173','<b>SpanTerm</b>')
+eltTree.linkNodes('120','149','<b>BoostingTermQuery</b>')
+eltTree.addNode('177','<b>Filter</b>','LuceneCoreQuery.dtd.html#Filter',false,false)
+eltTree.linkNodes('117','177')
+eltTree.addNode('178','<b><i>&lt;choice&gt;</i></b>',null,true,false)
+eltTree.linkNodes('177','178')
+eltTree.linkNodes('178','133','<b>RangeFilter</b>')
+eltTree.linkNodes('178','139','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('178','147','<b>CachedFilter</b>')
+eltTree.linkNodes('113','121','<b>TermQuery</b>')
+eltTree.linkNodes('113','124','<b>TermsQuery</b>')
+eltTree.linkNodes('113','129','<b>MatchAllDocsQuery</b>')
+eltTree.linkNodes('113','130','<b>ConstantScoreQuery</b>')
+eltTree.linkNodes('113','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('113','150','<b>NumericRangeQuery</b>')
+eltTree.linkNodes('113','158','<b>SpanOr</b>')
+eltTree.linkNodes('113','160','<b>SpanNear</b>')
+eltTree.linkNodes('113','164','<b>SpanOrTerms</b>')
+eltTree.linkNodes('113','166','<b>SpanFirst</b>')
+eltTree.linkNodes('113','170','<b>SpanNot</b>')
+eltTree.linkNodes('113','173','<b>SpanTerm</b>')
+eltTree.linkNodes('113','149','<b>BoostingTermQuery</b>')
+eltTree.linkNodes('113','133','<b>RangeFilter</b>')
+eltTree.linkNodes('113','139','<b>NumericRangeFilter</b>')
+eltTree.linkNodes('113','147','<b>CachedFilter</b>')
+eltTree.linkNodes('104','149','BoostingTermQuery')
+eltTree.linkNodes('104','147','CachedFilter')
+eltTree.linkNodes('104','111','Clause')
+eltTree.linkNodes('104','130','ConstantScoreQuery')
+eltTree.linkNodes('104','175','Exclude')
+eltTree.linkNodes('104','177','Filter')
+eltTree.linkNodes('104','117','FilteredQuery')
+eltTree.linkNodes('104','171','Include')
+eltTree.linkNodes('104','129','MatchAllDocsQuery')
+eltTree.linkNodes('104','139','NumericRangeFilter')
+eltTree.linkNodes('104','150','NumericRangeQuery')
+eltTree.linkNodes('104','119','Query')
+eltTree.linkNodes('104','133','RangeFilter')
+eltTree.linkNodes('104','166','SpanFirst')
+eltTree.linkNodes('104','160','SpanNear')
+eltTree.linkNodes('104','170','SpanNot')
+eltTree.linkNodes('104','158','SpanOr')
+eltTree.linkNodes('104','164','SpanOrTerms')
+eltTree.linkNodes('104','173','SpanTerm')
+eltTree.linkNodes('104','121','TermQuery')
+eltTree.linkNodes('104','124','TermsQuery')
+eltTree.linkNodes('104','114','UserQuery')
 document.write(eltTree);
 //-->
 </script>

Modified: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/CoreParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/CoreParser.java?rev=928114&r1=928113&r2=928114&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/CoreParser.java (original)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/CoreParser.java Sat Mar 27 00:36:55 2010
@@ -70,13 +70,14 @@ public class CoreParser implements Query
 		this.parser=parser;
 		filterFactory = new FilterBuilderFactory();
 		filterFactory.addBuilder("RangeFilter",new RangeFilterBuilder());
-		
+		filterFactory.addBuilder("NumericRangeFilter",new NumericRangeFilterBuilder());
 		
 		queryFactory = new QueryBuilderFactory();
 		queryFactory.addBuilder("TermQuery",new TermQueryBuilder());
 		queryFactory.addBuilder("TermsQuery",new TermsQueryBuilder(analyzer));
 		queryFactory.addBuilder("MatchAllDocsQuery",new MatchAllDocsQueryBuilder());
 		queryFactory.addBuilder("BooleanQuery",new BooleanQueryBuilder(queryFactory));
+		queryFactory.addBuilder("NumericRangeQuery",new NumericRangeQueryBuilder());
 		if(parser!=null)
 		{
 			queryFactory.addBuilder("UserQuery",new UserInputQueryBuilder(parser));

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeFilterBuilder.java Sat Mar 27 00:36:55 2010
@@ -0,0 +1,165 @@
+package org.apache.lucene.xmlparser.builders;
+
+/**
+ * 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.
+ */
+
+import java.io.IOException;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.DocIdSet;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.NumericRangeFilter;
+import org.apache.lucene.util.NumericUtils;
+import org.apache.lucene.xmlparser.DOMUtils;
+import org.apache.lucene.xmlparser.FilterBuilder;
+import org.apache.lucene.xmlparser.ParserException;
+import org.w3c.dom.Element;
+
+/**
+ * Creates a {@link NumericRangeFilter}. The table below specifies the required
+ * attributes and the defaults if optional attributes are omitted. For more
+ * detail on what each of the attributes actually do, consult the documentation
+ * for {@link NumericRangeFilter}:
+ * <table>
+ * <tr>
+ * <th>Attribute name</th>
+ * <th>Values</th>
+ * <th>Required</th>
+ * <th>Default</th>
+ * </tr>
+ * <tr>
+ * <td>fieldName</td>
+ * <td>String</td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>lowerTerm</td>
+ * <td>Specified by <tt>type</tt></td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>upperTerm</td>
+ * <td>Specified by <tt>type</tt></td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>int, long, float, double</td>
+ * <td>No</td>
+ * <td>int</td>
+ * </tr>
+ * <tr>
+ * <td>includeLower</td>
+ * <td>true, false</td>
+ * <td>No</td>
+ * <td>true</td>
+ * </tr>
+ * <tr>
+ * <td>includeUpper</td>
+ * <td>true, false</td>
+ * <td>No</td>
+ * <td>true</td>
+ * </tr>
+ * <tr>
+ * <td>precisionStep</td>
+ * <td>Integer</td>
+ * <td>No</td>
+ * <td>4</td>
+ * </tr>
+ * </table>
+ * <p>
+ * If an error occurs parsing the supplied <tt>lowerTerm</tt> or
+ * <tt>upperTerm</tt> into the numeric type specified by <tt>type</tt>, then the
+ * error will be silently ignored and the resulting filter will not match any
+ * documents.
+ */
+public class NumericRangeFilterBuilder implements FilterBuilder {
+	private static final NoMatchFilter NO_MATCH_FILTER = new NoMatchFilter();
+
+	private boolean strictMode = false;
+
+	/**
+	 * Specifies how this {@link NumericRangeFilterBuilder} will handle errors.
+	 * <p>
+	 * If this is set to true, {@link #getFilter(Element)} will throw a
+	 * {@link ParserException} if it is unable to parse the lowerTerm or upperTerm
+	 * into the appropriate numeric type. If this is set to false, then this
+	 * exception will be silently ignored and the resulting filter will not match
+	 * any documents.
+	 * <p>
+	 * Defaults to false.
+	 * 
+	 * @param strictMode
+	 */
+	public void setStrictMode(boolean strictMode) {
+		this.strictMode = strictMode;
+	}
+
+	public Filter getFilter(Element e) throws ParserException {
+		String field = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
+		String lowerTerm = DOMUtils.getAttributeOrFail(e, "lowerTerm");
+		String upperTerm = DOMUtils.getAttributeOrFail(e, "upperTerm");
+		boolean lowerInclusive = DOMUtils.getAttribute(e, "includeLower", true);
+		boolean upperInclusive = DOMUtils.getAttribute(e, "includeUpper", true);
+		int precisionStep = DOMUtils.getAttribute(e, "precisionStep",  NumericUtils.PRECISION_STEP_DEFAULT);
+
+		String type = DOMUtils.getAttribute(e, "type", "int");
+		try {
+			Filter filter;
+			if (type.equalsIgnoreCase("int")) {
+				filter = NumericRangeFilter.newIntRange(field, precisionStep, Integer
+						.valueOf(lowerTerm), Integer.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("long")) {
+				filter = NumericRangeFilter.newLongRange(field, precisionStep, Long
+						.valueOf(lowerTerm), Long.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("double")) {
+				filter = NumericRangeFilter.newDoubleRange(field, precisionStep, Double
+						.valueOf(lowerTerm), Double.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("float")) {
+				filter = NumericRangeFilter.newFloatRange(field, precisionStep, Float
+						.valueOf(lowerTerm), Float.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else {
+				throw new ParserException(
+						"type attribute must be one of: [long, int, double, float]");
+			}
+			return filter;
+		} catch (NumberFormatException nfe) {
+			if (strictMode) {
+				throw new ParserException(
+						"Could not parse lowerTerm or upperTerm into a number", nfe);
+			}
+			return NO_MATCH_FILTER;
+		}
+	}
+
+	static class NoMatchFilter extends Filter {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
+			return null;
+		}
+
+	}
+}

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeQueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeQueryBuilder.java?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeQueryBuilder.java (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/NumericRangeQueryBuilder.java Sat Mar 27 00:36:55 2010
@@ -0,0 +1,127 @@
+package org.apache.lucene.xmlparser.builders;
+
+/**
+ * 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.
+ */
+
+import org.apache.lucene.search.NumericRangeQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.util.NumericUtils;
+import org.apache.lucene.xmlparser.DOMUtils;
+import org.apache.lucene.xmlparser.ParserException;
+import org.apache.lucene.xmlparser.QueryBuilder;
+import org.w3c.dom.Element;
+
+/**
+ * Creates a {@link NumericRangeQuery}. The table below specifies the required
+ * attributes and the defaults if optional attributes are omitted. For more
+ * detail on what each of the attributes actually do, consult the documentation
+ * for {@link NumericRangeQuery}:
+ * <table>
+ * <tr>
+ * <th>Attribute name</th>
+ * <th>Values</th>
+ * <th>Required</th>
+ * <th>Default</th>
+ * </tr>
+ * <tr>
+ * <td>fieldName</td>
+ * <td>String</td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>lowerTerm</td>
+ * <td>Specified by <tt>type</tt></td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>upperTerm</td>
+ * <td>Specified by <tt>type</tt></td>
+ * <td>Yes</td>
+ * <td>N/A</td>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>int, long, float, double</td>
+ * <td>No</td>
+ * <td>int</td>
+ * </tr>
+ * <tr>
+ * <td>includeLower</td>
+ * <td>true, false</td>
+ * <td>No</td>
+ * <td>true</td>
+ * </tr>
+ * <tr>
+ * <td>includeUpper</td>
+ * <td>true, false</td>
+ * <td>No</td>
+ * <td>true</td>
+ * </tr>
+ * <tr>
+ * <td>precisionStep</td>
+ * <td>Integer</td>
+ * <td>No</td>
+ * <td>4</td>
+ * </tr>
+ * </table>
+ * <p>
+ * A {@link ParserException} will be thrown if an error occurs parsing the
+ * supplied <tt>lowerTerm</tt> or <tt>upperTerm</tt> into the numeric type
+ * specified by <tt>type</tt>.
+ */
+public class NumericRangeQueryBuilder implements QueryBuilder {
+
+	public Query getQuery(Element e) throws ParserException {
+		String field = DOMUtils.getAttributeWithInheritanceOrFail(e, "fieldName");
+		String lowerTerm = DOMUtils.getAttributeOrFail(e, "lowerTerm");
+		String upperTerm = DOMUtils.getAttributeOrFail(e, "upperTerm");
+		boolean lowerInclusive = DOMUtils.getAttribute(e, "includeLower", true);
+		boolean upperInclusive = DOMUtils.getAttribute(e, "includeUpper", true);
+		int precisionStep = DOMUtils.getAttribute(e, "precisionStep", NumericUtils.PRECISION_STEP_DEFAULT);
+
+		String type = DOMUtils.getAttribute(e, "type", "int");
+		try {
+			Query filter;
+			if (type.equalsIgnoreCase("int")) {
+				filter = NumericRangeQuery.newIntRange(field, precisionStep, Integer
+						.valueOf(lowerTerm), Integer.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("long")) {
+				filter = NumericRangeQuery.newLongRange(field, precisionStep, Long
+						.valueOf(lowerTerm), Long.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("double")) {
+				filter = NumericRangeQuery.newDoubleRange(field, precisionStep, Double
+						.valueOf(lowerTerm), Double.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else if (type.equalsIgnoreCase("float")) {
+				filter = NumericRangeQuery.newFloatRange(field, precisionStep, Float
+						.valueOf(lowerTerm), Float.valueOf(upperTerm), lowerInclusive,
+						upperInclusive);
+			} else {
+				throw new ParserException(
+						"type attribute must be one of: [long, int, double, float]");
+			}
+			return filter;
+		} catch (NumberFormatException nfe) {
+			throw new ParserException(
+					"Could not parse lowerTerm or upperTerm into a number", nfe);
+		}
+	}
+}

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeFilterBuilderTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeFilterBuilderTestCase.java?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeFilterBuilderTestCase.java (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeFilterBuilderTestCase.java Sat Mar 27 00:36:55 2010
@@ -0,0 +1,216 @@
+package com.apache.lucene.xmlparser.builders;
+
+/**
+ * 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.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.TestCase;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriter.MaxFieldLength;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.NumericRangeFilter;
+import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.xmlparser.ParserException;
+import org.apache.lucene.xmlparser.builders.NumericRangeFilterBuilder;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+public class NumericRangeFilterBuilderTestCase extends TestCase {
+
+	public void testGetFilterHandleNumericParseErrorStrict() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(true);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='int' lowerTerm='-1' upperTerm='NaN'/>";
+		Document doc = getDocumentFromString(xml);
+		try {
+			filterBuilder.getFilter(doc.getDocumentElement());
+		} catch (ParserException e) {
+			return;
+		}
+		fail("Expected to throw " + ParserException.class);
+	}
+
+	public void testGetFilterHandleNumericParseError() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(false);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='int' lowerTerm='-1' upperTerm='NaN'/>";
+		Document doc = getDocumentFromString(xml);
+		Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
+
+		RAMDirectory ramDir = new RAMDirectory();
+		IndexWriter writer = new IndexWriter(ramDir, null, MaxFieldLength.UNLIMITED);
+		try
+		{
+			IndexReader reader = IndexReader.open(ramDir, true);
+			try
+			{
+				assertNull(filter.getDocIdSet(reader));
+			}
+			finally
+			{
+				reader.close();
+			}
+		}
+		finally
+		{
+			writer.commit();
+			writer.close();
+		}
+	}
+
+	public void testGetFilterInt() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(true);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='int' lowerTerm='-1' upperTerm='10'/>";
+		Document doc = getDocumentFromString(xml);
+		Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Integer> numRangeFilter = (NumericRangeFilter<Integer>) filter;
+		assertEquals(Integer.valueOf(-1), numRangeFilter.getMin());
+		assertEquals(Integer.valueOf(10), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeFilter fieldName='AGE' type='int' lowerTerm='-1' upperTerm='10' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Filter filter2 = filterBuilder.getFilter(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Integer> numRangeFilter2 = (NumericRangeFilter) filter2;
+		assertEquals(Integer.valueOf(-1), numRangeFilter2.getMin());
+		assertEquals(Integer.valueOf(10), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterLong() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(true);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='LoNg' lowerTerm='-2321' upperTerm='60000000'/>";
+		Document doc = getDocumentFromString(xml);
+		Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Long> numRangeFilter = (NumericRangeFilter) filter;
+		assertEquals(Long.valueOf(-2321L), numRangeFilter.getMin());
+		assertEquals(Long.valueOf(60000000L), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeFilter fieldName='AGE' type='LoNg' lowerTerm='-2321' upperTerm='60000000' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Filter filter2 = filterBuilder.getFilter(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Long> numRangeFilter2 = (NumericRangeFilter) filter2;
+		assertEquals(Long.valueOf(-2321L), numRangeFilter2.getMin());
+		assertEquals(Long.valueOf(60000000L), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterDouble() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(true);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='doubLe' lowerTerm='-23.21' upperTerm='60000.00023'/>";
+		Document doc = getDocumentFromString(xml);
+
+		Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Double> numRangeFilter = (NumericRangeFilter) filter;
+		assertEquals(Double.valueOf(-23.21d), numRangeFilter.getMin());
+		assertEquals(Double.valueOf(60000.00023d), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeFilter fieldName='AGE' type='doubLe' lowerTerm='-23.21' upperTerm='60000.00023' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Filter filter2 = filterBuilder.getFilter(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Double> numRangeFilter2 = (NumericRangeFilter) filter2;
+		assertEquals(Double.valueOf(-23.21d), numRangeFilter2.getMin());
+		assertEquals(Double.valueOf(60000.00023d), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterFloat() throws Exception {
+		NumericRangeFilterBuilder filterBuilder = new NumericRangeFilterBuilder();
+		filterBuilder.setStrictMode(true);
+
+		String xml = "<NumericRangeFilter fieldName='AGE' type='FLOAT' lowerTerm='-2.321432' upperTerm='32432.23'/>";
+		Document doc = getDocumentFromString(xml);
+
+		Filter filter = filterBuilder.getFilter(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Float> numRangeFilter = (NumericRangeFilter) filter;
+		assertEquals(Float.valueOf(-2.321432f), numRangeFilter.getMin());
+		assertEquals(Float.valueOf(32432.23f), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeFilter fieldName='AGE' type='FLOAT' lowerTerm='-2.321432' upperTerm='32432.23' includeUpper='false' precisionStep='2' />";
+		Document doc2 = getDocumentFromString(xml2);
+
+		Filter filter2 = filterBuilder.getFilter(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeFilter<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeFilter<Float> numRangeFilter2 = (NumericRangeFilter) filter2;
+		assertEquals(Float.valueOf(-2.321432f), numRangeFilter2.getMin());
+		assertEquals(Float.valueOf(32432.23f), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	private static Document getDocumentFromString(String str)
+			throws SAXException, IOException, ParserConfigurationException {
+		InputStream is = new ByteArrayInputStream(str.getBytes());
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		factory.setNamespaceAware(true);
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document doc = builder.parse(is);
+		is.close();
+		return doc;
+	}
+
+}

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeQueryBuilderTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeQueryBuilderTestCase.java?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeQueryBuilderTestCase.java (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/com/apache/lucene/xmlparser/builders/NumericRangeQueryBuilderTestCase.java Sat Mar 27 00:36:55 2010
@@ -0,0 +1,178 @@
+package com.apache.lucene.xmlparser.builders;
+
+/**
+ * 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.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.TestCase;
+
+import org.apache.lucene.search.NumericRangeQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.xmlparser.ParserException;
+import org.apache.lucene.xmlparser.builders.NumericRangeQueryBuilder;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+public class NumericRangeQueryBuilderTestCase extends TestCase {
+
+	public void testGetFilterHandleNumericParseErrorStrict() throws Exception {
+		NumericRangeQueryBuilder filterBuilder = new NumericRangeQueryBuilder();
+
+		String xml = "<NumericRangeQuery fieldName='AGE' type='int' lowerTerm='-1' upperTerm='NaN'/>";
+		Document doc = getDocumentFromString(xml);
+		try {
+			filterBuilder.getQuery(doc.getDocumentElement());
+		} catch (ParserException e) {
+			return;
+		}
+		fail("Expected to throw " + ParserException.class);
+	}
+
+	public void testGetFilterInt() throws Exception {
+		NumericRangeQueryBuilder filterBuilder = new NumericRangeQueryBuilder();
+
+		String xml = "<NumericRangeQuery fieldName='AGE' type='int' lowerTerm='-1' upperTerm='10'/>";
+		Document doc = getDocumentFromString(xml);
+		Query filter = filterBuilder.getQuery(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Integer> numRangeFilter = (NumericRangeQuery<Integer>) filter;
+		assertEquals(Integer.valueOf(-1), numRangeFilter.getMin());
+		assertEquals(Integer.valueOf(10), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeQuery fieldName='AGE' type='int' lowerTerm='-1' upperTerm='10' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Query filter2 = filterBuilder.getQuery(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Integer> numRangeFilter2 = (NumericRangeQuery) filter2;
+		assertEquals(Integer.valueOf(-1), numRangeFilter2.getMin());
+		assertEquals(Integer.valueOf(10), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterLong() throws Exception {
+		NumericRangeQueryBuilder filterBuilder = new NumericRangeQueryBuilder();
+
+		String xml = "<NumericRangeQuery fieldName='AGE' type='LoNg' lowerTerm='-2321' upperTerm='60000000'/>";
+		Document doc = getDocumentFromString(xml);
+		Query filter = filterBuilder.getQuery(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Long> numRangeFilter = (NumericRangeQuery) filter;
+		assertEquals(Long.valueOf(-2321L), numRangeFilter.getMin());
+		assertEquals(Long.valueOf(60000000L), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeQuery fieldName='AGE' type='LoNg' lowerTerm='-2321' upperTerm='60000000' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Query filter2 = filterBuilder.getQuery(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Long> numRangeFilter2 = (NumericRangeQuery) filter2;
+		assertEquals(Long.valueOf(-2321L), numRangeFilter2.getMin());
+		assertEquals(Long.valueOf(60000000L), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterDouble() throws Exception {
+		NumericRangeQueryBuilder filterBuilder = new NumericRangeQueryBuilder();
+
+		String xml = "<NumericRangeQuery fieldName='AGE' type='doubLe' lowerTerm='-23.21' upperTerm='60000.00023'/>";
+		Document doc = getDocumentFromString(xml);
+
+		Query filter = filterBuilder.getQuery(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Double> numRangeFilter = (NumericRangeQuery) filter;
+		assertEquals(Double.valueOf(-23.21d), numRangeFilter.getMin());
+		assertEquals(Double.valueOf(60000.00023d), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeQuery fieldName='AGE' type='doubLe' lowerTerm='-23.21' upperTerm='60000.00023' includeUpper='false'/>";
+		Document doc2 = getDocumentFromString(xml2);
+		Query filter2 = filterBuilder.getQuery(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Double> numRangeFilter2 = (NumericRangeQuery) filter2;
+		assertEquals(Double.valueOf(-23.21d), numRangeFilter2.getMin());
+		assertEquals(Double.valueOf(60000.00023d), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	public void testGetFilterFloat() throws Exception {
+		NumericRangeQueryBuilder filterBuilder = new NumericRangeQueryBuilder();
+
+		String xml = "<NumericRangeQuery fieldName='AGE' type='FLOAT' lowerTerm='-2.321432' upperTerm='32432.23'/>";
+		Document doc = getDocumentFromString(xml);
+
+		Query filter = filterBuilder.getQuery(doc.getDocumentElement());
+		assertTrue(filter instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Float> numRangeFilter = (NumericRangeQuery) filter;
+		assertEquals(Float.valueOf(-2.321432f), numRangeFilter.getMin());
+		assertEquals(Float.valueOf(32432.23f), numRangeFilter.getMax());
+		assertEquals("AGE", numRangeFilter.getField());
+		assertTrue(numRangeFilter.includesMin());
+		assertTrue(numRangeFilter.includesMax());
+
+		String xml2 = "<NumericRangeQuery fieldName='AGE' type='FLOAT' lowerTerm='-2.321432' upperTerm='32432.23' includeUpper='false' precisionStep='2' />";
+		Document doc2 = getDocumentFromString(xml2);
+
+		Query filter2 = filterBuilder.getQuery(doc2.getDocumentElement());
+		assertTrue(filter2 instanceof NumericRangeQuery<?>);
+		@SuppressWarnings("unchecked")
+		NumericRangeQuery<Float> numRangeFilter2 = (NumericRangeQuery) filter2;
+		assertEquals(Float.valueOf(-2.321432f), numRangeFilter2.getMin());
+		assertEquals(Float.valueOf(32432.23f), numRangeFilter2.getMax());
+		assertEquals("AGE", numRangeFilter2.getField());
+		assertTrue(numRangeFilter2.includesMin());
+		assertFalse(numRangeFilter2.includesMax());
+	}
+
+	private static Document getDocumentFromString(String str)
+			throws SAXException, IOException, ParserConfigurationException {
+		InputStream is = new ByteArrayInputStream(str.getBytes());
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		factory.setNamespaceAware(true);
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document doc = builder.parse(is);
+		is.close();
+		return doc;
+	}
+
+}

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeFilterQuery.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeFilterQuery.xml?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeFilterQuery.xml (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeFilterQuery.xml Sat Mar 27 00:36:55 2010
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<FilteredQuery>
+	<Query>
+		<BooleanQuery fieldName="contents">
+			<Clause occurs="should">
+				<TermQuery>merger</TermQuery>
+			</Clause>
+			<Clause occurs="mustnot">
+				<TermQuery >sumitomo</TermQuery>		
+			</Clause>
+			<Clause occurs="must">
+				<TermQuery>bank</TermQuery>
+			</Clause>
+		</BooleanQuery>
+	</Query>
+	
+	<Filter>
+		<NumericRangeFilter fieldName="date2" lowerTerm="19870409" upperTerm="19870412"/>
+	</Filter>
+	
+</FilteredQuery>

Added: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeQueryQuery.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeQueryQuery.xml?rev=928114&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeQueryQuery.xml (added)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/NumericRangeQueryQuery.xml Sat Mar 27 00:36:55 2010
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<BooleanQuery fieldName="contents">
+	<Clause occurs="should">
+		<TermQuery>merger</TermQuery>
+	</Clause>
+	<Clause occurs="mustnot">
+		<TermQuery >sumitomo</TermQuery>		
+	</Clause>
+	<Clause occurs="must">
+		<TermQuery>bank</TermQuery>
+	</Clause>
+	<Clause occurs="must">
+		<NumericRangeQuery fieldName="date2" lowerTerm="19870409" upperTerm="19870412"/>
+	</Clause>
+</BooleanQuery>

Modified: lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java?rev=928114&r1=928113&r2=928114&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java (original)
+++ lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java Sat Mar 27 00:36:55 2010
@@ -8,6 +8,7 @@ import java.io.InputStreamReader;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.NumericField;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
@@ -70,6 +71,9 @@ public class TestParser extends LuceneTe
 				org.apache.lucene.document.Document doc =new org.apache.lucene.document.Document();
 				doc.add(new Field("date",date,Field.Store.YES,Field.Index.ANALYZED));
 				doc.add(new Field("contents",content,Field.Store.YES,Field.Index.ANALYZED));
+				NumericField numericField = new NumericField("date2");
+				numericField.setIntValue(Integer.valueOf(date));
+				doc.add(numericField);
 				writer.addDocument(doc);
 				line=d.readLine();
 			}			
@@ -191,6 +195,18 @@ public class TestParser extends LuceneTe
 			assertEquals("DuplicateFilterQuery should produce 1 result ", 1,h);
 	}
 	
+	public void testNumericRangeFilterQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("NumericRangeFilterQuery.xml");
+			dumpResults("NumericRangeFilter", q, 5);
+	}
+	
+	public void testNumericRangeQueryQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("NumericRangeQueryQuery.xml");
+			dumpResults("NumericRangeQuery", q, 5);
+	}
+	
 
 
 	//================= Helper methods ===================================



Mime
View raw message