You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2009/08/20 20:23:36 UTC
svn commit: r806289 - in /lucene/solr/trunk: ./
src/java/org/apache/solr/handler/admin/ src/test/org/apache/solr/
src/test/org/apache/solr/handler/component/ src/test/test-files/solr/conf/
Author: hossman
Date: Thu Aug 20 18:23:36 2009
New Revision: 806289
URL: http://svn.apache.org/viewvc?rev=806289&view=rev
Log:
SOLR-1371: LukeRequestHandler/schema.jsp errored if schema had no uniqueKey field. The new test for this also (hopefully) adds some future proofing against similar bugs in the future. As a side effect QueryElevationComponentTest was refactored, and a bug in that test was found.
Added:
lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java (with props)
lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml (with props)
lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-elevate.xml
- copied, changed from r805547, lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
lucene/solr/trunk/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=806289&r1=806288&r2=806289&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Thu Aug 20 18:23:36 2009
@@ -482,6 +482,12 @@
57. SOLR-1360: Prevent PhoneticFilter from producing duplicate tokens. (yonik)
+58. SOLR-1371: LukeRequestHandler/schema.jsp errored if schema had no
+ uniqueKey field. The new test for this also (hopefully) adds some
+ future proofing against similar bugs in the future. As a side
+ effect QueryElevationComponentTest was refactored, and a bug in
+ that test was found. (hossman)
+
Other Changes
----------------------
1. Upgraded to Lucene 2.4.0 (yonik)
Modified: lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?rev=806289&r1=806288&r2=806289&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Thu Aug 20 18:23:36 2009
@@ -370,7 +370,8 @@
SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<Object>();
finfo.add("fields", fields);
finfo.add("dynamicFields", dynamicFields);
- finfo.add("uniqueKeyField", uniqueField.getName());
+ finfo.add("uniqueKeyField",
+ null == uniqueField ? null : uniqueField.getName());
finfo.add("defaultSearchField", schema.getDefaultSearchFieldName());
finfo.add("types", types);
return finfo;
Added: lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java?rev=806289&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java (added)
+++ lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java Thu Aug 20 18:23:36 2009
@@ -0,0 +1,129 @@
+/**
+ * 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.
+ */
+
+package org.apache.solr;
+
+import org.apache.solr.request.*;
+import org.apache.solr.util.*;
+
+import java.util.Set;
+
+/**
+ * A test of basic features using the minial legal solr schema.
+ */
+public class MinimalSchemaTest extends AbstractSolrTestCase {
+
+ public String getSchemaFile() { return "solr/conf/schema-minimal.xml"; }
+
+
+ /**
+ * NOTE: we explicilty use the general 'solrconfig.xml' file here, in
+ * an attempt to test as many braod features as possible.
+ *
+ * Do not change this to point at some other "simpler" solrconfig.xml
+ * just because you want to add a new test case using solrconfig.xml,
+ * but your new testcase adds a feature that breaks this test.
+ */
+ public String getSolrConfigFile() { return "solr/conf/solrconfig.xml"; }
+
+ public void setUp() throws Exception {
+ super.setUp();
+
+ /* make sure some missguided soul doesn't inadvertantly give us
+ a uniqueKey field and defeat the point of hte tests
+ */
+ assertNull("UniqueKey Field isn't null",
+ h.getCore().getSchema().getUniqueKeyField());
+
+ lrf.args.put("version","2.0");
+
+ assertU("Simple assertion that adding a document works",
+ adoc("id", "4055",
+ "subject", "Hoss",
+ "project", "Solr"));
+ assertU(adoc("id", "4056",
+ "subject", "Yonik",
+ "project", "Solr"));
+ assertU(commit());
+ assertU(optimize());
+
+ }
+
+ public void testSimpleQueries() {
+
+ assertQ("couldn't find subject hoss",
+ req("subject:Hoss")
+ ,"//result[@numFound=1]"
+ ,"//str[@name='id'][.='4055']"
+ );
+
+ assertQ("couldn't find subject Yonik",
+ req("subject:Yonik")
+ ,"//result[@numFound=1]"
+ ,"//str[@name='id'][.='4056']"
+ );
+ }
+
+ /** SOLR-1371 */
+ public void testLuke() {
+
+ assertQ("basic luke request failed",
+ req("qt", "/admin/luke")
+ ,"//int[@name='numDocs'][.='2']"
+ ,"//int[@name='numTerms'][.='5']"
+ );
+
+ assertQ("luke show schema failed",
+ req("qt", "/admin/luke",
+ "show","schema")
+ ,"//int[@name='numDocs'][.='2']"
+ ,"//int[@name='numTerms'][.='5']"
+ ,"//null[@name='uniqueKeyField']"
+ ,"//null[@name='defaultSearchField']"
+ );
+
+ }
+
+
+ /**
+ * Iterates over all (non "/update/*") handlers in the core and hits
+ * them with a request (using some simple params) to verify that they
+ * don't generate an error against the minimal schema
+ */
+ public void testAllConfiguredHandlers() {
+ Set<String> handlerNames = h.getCore().getRequestHandlers().keySet();
+ for (String handler : handlerNames) {
+ try {
+ if (handler.startsWith("/update")) {
+ continue;
+ }
+
+ assertQ("failure w/handler: '" + handler + "'",
+ req("qt", handler,
+ // this should be fairly innoculous for any type of query
+ "q", "foo:bar")
+ ,"//lst[@name='responseHeader']"
+ );
+ } catch (Exception e) {
+ throw new RuntimeException("exception w/handler: '" + handler + "'",
+ e);
+ }
+ }
+ }
+}
+
+
Propchange: lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/solr/trunk/src/test/org/apache/solr/MinimalSchemaTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: lucene/solr/trunk/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java?rev=806289&r1=806288&r2=806289&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java Thu Aug 20 18:23:36 2009
@@ -40,7 +40,7 @@
public class QueryElevationComponentTest extends AbstractSolrTestCase {
@Override public String getSchemaFile() { return "schema12.xml"; }
- @Override public String getSolrConfigFile() { return "solrconfig.xml"; }
+ @Override public String getSolrConfigFile() { return "solrconfig-elevate.xml"; }
public void testInterface() throws Exception
{
@@ -89,13 +89,12 @@
public void testEmptyQuery() throws Exception {
SolrCore core = h.getCore();
-
-
//String query = "title:ipod";
Map<String,String> args = new HashMap<String, String>();
args.put( "q.alt", "*:*" );
args.put( "defType", "dismax");
+ args.put( CommonParams.QT, "/elevate" );
//args.put( CommonParams.FL, "id,title,score" );
SolrQueryRequest req = new LocalSolrQueryRequest( core, new MapSolrParams( args) );
assertQ("Make sure QEC handles null queries", req, "//*[@numFound='0']");
Added: lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml?rev=806289&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml (added)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml Thu Aug 20 18:23:36 2009
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+-->
+<schema name="minimal" version="1.1">
+ <types>
+ <fieldType name="string" class="solr.StrField"/>
+ </types>
+ <fields>
+ <dynamicField name="*" type="string" indexed="true" stored="true" />
+ </fields>
+</schema>
Propchange: lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: lucene/solr/trunk/src/test/test-files/solr/conf/schema-minimal.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Copied: lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-elevate.xml (from r805547, lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml)
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-elevate.xml?p2=lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-elevate.xml&p1=lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml&r1=805547&r2=806289&rev=806289&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml (original)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-elevate.xml Thu Aug 20 18:23:36 2009
@@ -168,22 +168,6 @@
-->
<enableLazyFieldLoading>true</enableLazyFieldLoading>
- <!--
-
- <cache name="myUserCache"
- class="solr.search.LRUCache"
- size="4096"
- initialSize="1024"
- autowarmCount="1024"
- regenerator="MyRegenerator"
- />
- -->
-
-
- <!--
- <useFilterForSortedQuery>true</useFilterForSortedQuery>
- -->
-
<queryResultWindowSize>10</queryResultWindowSize>
<!-- set maxSize artificially low to exercise both types of sets -->
@@ -197,122 +181,10 @@
<boolTofilterOptimizer enabled="false" cacheSize="32" threshold=".05"/>
- <!-- a newSearcher event is fired whenever a new searcher is being prepared
- and there is a current searcher handling requests (aka registered). -->
- <!-- QuerySenderListener takes an array of NamedList and executes a
- local query request for each NamedList in sequence. -->
- <!--
- <listener event="newSearcher" class="solr.QuerySenderListener">
- <arr name="queries">
- <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
- <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
- </arr>
- </listener>
- -->
-
- <!-- a firstSearcher event is fired whenever a new searcher is being
- prepared but there is no current registered searcher to handle
- requests or to gain prewarming data from. -->
- <!--
- <listener event="firstSearcher" class="solr.QuerySenderListener">
- <arr name="queries">
- <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
- </arr>
- </listener>
- -->
-
-
</query>
+ <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
- <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
- If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
- based HashBitset. -->
-
- <!-- requestHandler plugins... incoming queries will be dispatched to the
- correct handler based on the qt (query type) param matching the
- name of registered handlers.
- The "standard" request handler is the default and will be used if qt
- is not specified in the request.
- -->
- <requestHandler name="standard" class="solr.StandardRequestHandler">
- <bool name="httpCaching">true</bool>
- </requestHandler>
- <requestHandler name="dismaxOldStyleDefaults"
- class="solr.DisMaxRequestHandler" >
- <!-- for historic reasons, DisMaxRequestHandler will use all of
- it's init params as "defaults" if there is no "defaults" list
- specified
- -->
- <float name="tie">0.01</float>
- <str name="qf">
- text^0.5 features_t^1.0 subject^1.4 title_stemmed^2.0
- </str>
- <str name="pf">
- text^0.2 features_t^1.1 subject^1.4 title_stemmed^2.0 title^1.5
- </str>
- <str name="bf">
- ord(weight)^0.5 recip(rord(iind),1,1000,1000)^0.3
- </str>
- <str name="mm">
- 3<-1 5<-2 6<90%
- </str>
- <int name="ps">100</int>
- </requestHandler>
- <requestHandler name="dismax" class="solr.DisMaxRequestHandler" >
- <lst name="defaults">
- <str name="q.alt">*:*</str>
- <float name="tie">0.01</float>
- <str name="qf">
- text^0.5 features_t^1.0 subject^1.4 title_stemmed^2.0
- </str>
- <str name="pf">
- text^0.2 features_t^1.1 subject^1.4 title_stemmed^2.0 title^1.5
- </str>
- <str name="bf">
- ord(weight)^0.5 recip(rord(iind),1,1000,1000)^0.3
- </str>
- <str name="mm">
- 3<-1 5<-2 6<90%
- </str>
- <int name="ps">100</int>
- </lst>
- </requestHandler>
- <requestHandler name="old" class="solr.tst.OldRequestHandler" >
- <int name="myparam">1000</int>
- <float name="ratio">1.4142135</float>
- <arr name="myarr"><int>1</int><int>2</int></arr>
- <str>foo</str>
- </requestHandler>
- <requestHandler name="oldagain" class="solr.tst.OldRequestHandler" >
- <lst name="lst1"> <str name="op">sqrt</str> <int name="val">2</int> </lst>
- <lst name="lst2"> <str name="op">log</str> <float name="val">10</float> </lst>
- </requestHandler>
-
- <requestHandler name="test" class="solr.tst.TestRequestHandler" />
-
- <!-- test query parameter defaults -->
- <requestHandler name="defaults" class="solr.StandardRequestHandler">
- <lst name="defaults">
- <int name="rows">4</int>
- <bool name="hl">true</bool>
- <str name="hl.fl">text,name,subject,title,whitetok</str>
- </lst>
- </requestHandler>
-
- <!-- test query parameter defaults -->
- <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
- <lst name="defaults">
- <int name="rows">4</int>
- <bool name="hl">true</bool>
- <str name="hl.fl">text,name,subject,title,whitetok</str>
- </lst>
- </requestHandler>
-
- <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
- <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy">
- <bool name="httpCaching">false</bool>
- </requestHandler>
<!-- test elevation -->
<searchComponent name="elevate" class="org.apache.solr.handler.component.QueryElevationComponent" >
@@ -329,96 +201,6 @@
</arr>
</requestHandler>
- <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
- <str name="queryAnalyzerFieldType">lowerfilt</str>
-
- <lst name="spellchecker">
- <str name="name">default</str>
- <str name="field">lowerfilt</str>
- <str name="spellcheckIndexDir">spellchecker1</str>
- <str name="buildOnCommit">true</str>
- </lst>
- <!-- Example of using different distance measure -->
- <lst name="spellchecker">
- <str name="name">jarowinkler</str>
- <str name="field">lowerfilt</str>
- <!-- Use a different Distance Measure -->
- <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
- <str name="spellcheckIndexDir">spellchecker2</str>
-
- </lst>
- <lst name="spellchecker">
- <str name="classname">solr.FileBasedSpellChecker</str>
- <str name="name">external</str>
- <str name="sourceLocation">spellings.txt</str>
- <str name="characterEncoding">UTF-8</str>
- <str name="spellcheckIndexDir">spellchecker3</str>
- </lst>
- </searchComponent>
-
- <searchComponent name="termsComp" class="org.apache.solr.handler.component.TermsComponent"/>
-
- <requestHandler name="/terms" class="org.apache.solr.handler.component.SearchHandler">
- <arr name="components">
- <str>termsComp</str>
- </arr>
- </requestHandler>
- <!--
- The SpellingQueryConverter to convert raw (CommonParams.Q) queries into tokens. Uses a simple regular expression
- to strip off field markup, boosts, ranges, etc. but it is not guaranteed to match an exact parse from the query parser.
- -->
- <queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>
-
- <requestHandler name="spellCheckCompRH" class="org.apache.solr.handler.component.SearchHandler">
- <lst name="defaults">
- <!-- omp = Only More Popular -->
- <str name="spellcheck.onlyMorePopular">false</str>
- <!-- exr = Extended Results -->
- <str name="spellcheck.extendedResults">false</str>
- <!-- The number of suggestions to return -->
- <str name="spellcheck.count">1</str>
- </lst>
- <arr name="last-components">
- <str>spellcheck</str>
- </arr>
- </requestHandler>
-
-
- <searchComponent name="tvComponent" class="org.apache.solr.handler.component.TermVectorComponent"/>
-
- <requestHandler name="tvrh" class="org.apache.solr.handler.component.SearchHandler">
- <lst name="defaults">
-
- </lst>
- <arr name="last-components">
- <str>tvComponent</str>
- </arr>
- </requestHandler>
-
- <highlighting>
- <!-- Configure the standard fragmenter -->
- <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
- <lst name="defaults">
- <int name="hl.fragsize">100</int>
- </lst>
- </fragmenter>
-
- <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
- <lst name="defaults">
- <int name="hl.fragsize">70</int>
- </lst>
- </fragmenter>
-
- <!-- Configure the standard formatter -->
- <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
- <lst name="defaults">
- <str name="hl.simple.pre"><![CDATA[<em>]]></str>
- <str name="hl.simple.post"><![CDATA[</em>]]></str>
- </lst>
- </formatter>
- </highlighting>
-
-
<!-- enable streaming for testing... -->
<requestDispatcher handleSelect="true" >
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
@@ -438,14 +220,4 @@
<queryParser name="foo" class="FooQParserPlugin"/>
- <updateRequestProcessorChain name="dedupe">
- <processor class="org.apache.solr.update.processor.SignatureUpdateProcessorFactory">
- <bool name="enabled">false</bool>
- <bool name="overwriteDupes">true</bool>
- <str name="fields">v_t,t_field</str>
- <str name="signatureClass">org.apache.solr.update.processor.TextProfileSignature</str>
- </processor>
- <processor class="solr.RunUpdateProcessorFactory" />
- </updateRequestProcessorChain>
-
</config>
Modified: lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml?rev=806289&r1=806288&r2=806289&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml (original)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig.xml Thu Aug 20 18:23:36 2009
@@ -20,6 +20,20 @@
<!-- $Id: solrconfig.xml 382610 2006-03-03 01:43:03Z yonik $
$Source$
$Name$
+
+
+
+ This is a "kitchen sink" config file that tests can use.
+ When writting a new test, feel free to add *new* items (plugins,
+ config options, etc...) as long as they don't break any existing
+ tests. if you need to test something esoteric please add a new
+ "solrconfig-your-esoteric-purpose.xml" config file.
+
+ Note in particular that this test is used by MinimalSchemaTest so
+ Anything added to this file needs to work correctly even if there
+ is now uniqueKey or defaultSearch Field.
+
+
-->
<config>
@@ -244,6 +258,7 @@
it's init params as "defaults" if there is no "defaults" list
specified
-->
+ <str name="q.alt">*:*</str>
<float name="tie">0.01</float>
<str name="qf">
text^0.5 features_t^1.0 subject^1.4 title_stemmed^2.0
@@ -289,6 +304,8 @@
<lst name="lst2"> <str name="op">log</str> <float name="val">10</float> </lst>
</requestHandler>
+ <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+
<requestHandler name="test" class="solr.tst.TestRequestHandler" />
<!-- test query parameter defaults -->
@@ -314,21 +331,6 @@
<bool name="httpCaching">false</bool>
</requestHandler>
- <!-- test elevation -->
- <searchComponent name="elevate" class="org.apache.solr.handler.component.QueryElevationComponent" >
- <str name="queryFieldType">string</str>
- <str name="config-file">elevate.xml</str>
- </searchComponent>
-
- <requestHandler name="/elevate" class="org.apache.solr.handler.component.SearchHandler">
- <lst name="defaults">
- <str name="echoParams">explicit</str>
- </lst>
- <arr name="last-components">
- <str>elevate</str>
- </arr>
- </requestHandler>
-
<searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
<str name="queryAnalyzerFieldType">lowerfilt</str>