Okay... sorry I wasn't paying close enough attention. What is happening is that the empty parentheses are illegal in Lucene query syntax:

<str name="msg">org.apache.solr.search.SyntaxError: Cannot parse 'id:* AND text:()': Encountered " ")" ") "" at line 1, column 15.
Was expecting one of:
   &lt;NOT&gt; ...
   "+" ...
   "-" ...
   &lt;BAREOPER&gt; ...
   "(" ...
   "*" ...
   &lt;QUOTED&gt; ...
   &lt;TERM&gt; ...
   &lt;PREFIXTERM&gt; ...
   &lt;WILDTERM&gt; ...
   &lt;REGEXPTERM&gt; ...
   "[" ...
   "{" ...
   &lt;LPARAMS&gt; ...
   &lt;NUMBER&gt; ...
   &lt;TERM&gt; ...
   "*" ...
   </str>
 <int name="code">400</int>

Edismax traps such errors and then "escapes" the query so that Lucene will no longer throw an error. In this case, it puts quotes around the "AND" operator, which is why you see "and" included in the parsed query as if it were a term. And I believe it turns "text:()" into "text:"()"", which makes the original Lucene error go away, but the "()" analyzes to nothing and generates no term in the query.

So, fix your syntax error and the anomaly should go away.

-- Jack Krupansky

-----Original Message----- From: Shankar Sundararaju
Sent: Thursday, May 23, 2013 7:23 PM
To: solr-user@lucene.apache.org
Subject: Re: Can anyone explain this Solr query behavior?

Hi Erick,

Here's the output after turning on the debug flag:

*q=text:()&debug=query*

   yields

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">17</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">text:()</str>
<str name="debug">query</str>
</lst>
</lst>
<result name="response" numFound="0" start="0" maxScore="0.0"></result>
<lst name="debug">
<str name="rawquerystring">text:()</str>
<str name="querystring">text:()</str>
<str name="parsedquery">(+())/no_coord</str>
<str name="parsedquery_toString">+()</str>
<str name="QParser">ExtendedDismaxQParser</str>
<null name="altquerystring"/>
<null name="boost_queries"/>
<arr name="parsed_boost_queries"/>
<null name="boostfuncs"/>
</lst>
</response>

*q=doc-id:3000&debug=query*

   yields

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">17</int>
<lst name="params">
<str name="q">doc-id:3000</str>
<str name="debug">query</str>
</lst>
</lst>
<result name="response" numFound="1" start="0" maxScore="11.682044">
<doc>
 :
 :
</doc>
</result>
<lst name="debug">
<str name="rawquerystring">doc-id:3000</str>
<str name="querystring">doc-id:3000</str>
<str name="parsedquery">(+doc-id:3000)/no_coord</str>
<str name="parsedquery_toString">+doc-id:`#8;#0;#0;#23;8</str>
<str name="QParser">ExtendedDismaxQParser</str>
<null name="altquerystring"/>
<null name="boost_queries"/>
<arr name="parsed_boost_queries"/>
<null name="boostfuncs"/>
</lst>
</response>

*q=doc-id:3000 AND text:()&debug=query*

 yields

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">23</int>
<lst name="params">
<str name="q">doc-id:3000 AND text:()</str>
<str name="debug">query</str>
</lst>
</lst>
<result name="response" numFound="631647" start="0" maxScore="8.056607">
<doc>
:
</doc>
:
</doc>
<doc>
:
</doc>
<doc>
:
</doc>
<doc>
:
</doc>
<doc>
:
</doc>
</result>
<lst name="debug">
<str name="rawquerystring">doc-id:3000 AND text:()</str>
<str name="querystring">doc-id:3000 AND text:()</str>
<str name="parsedquery">
(+(doc-id:3000 DisjunctionMaxQuery((Publisher:and^2.0 | text:and |
Classification:and^2.0 | Contributors:and^2.0 | Title:and^3.0))))/no_coord
</str>
<str name="parsedquery_toString">
+(doc-id:`#8;#0;#0;#23;8 (Publisher:and^2.0 | text:and |
Classification:and^2.0 | Contributors:and^2.0 | Title:and^3.0))
</str>
<str name="QParser">ExtendedDismaxQParser</str>
<null name="altquerystring"/>
<null name="boost_queries"/>
<arr name="parsed_boost_queries"/>
<null name="boostfuncs"/>
</lst>
</response>

*solrconfig.xml:*
<requestHandler name="/select" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">text</str>
      <str name="defType">edismax</str>
      <str name="qf">text^1.0 Title^3.0 Classification^2.0
Contributors^2.0 Publisher^2.0</str>
    </lst>

*schema.xml:*
<field name="text" type="my_text" indexed="true" stored="false" required=
"false"/>*
*
<dynamicField name="*" type="my_text" indexed="true" stored="true"
multiValued="false"/>
<fieldType name="my_text" class="solr.TextField"> <analyzer type="index"
class="MyAnalyzer"/> <analyzer type="query" class="MyAnalyzer"/> <analyzer
type="multiterm" class="MyAnalyzer"/> </fieldType>
*
*
*Note:* MyAnalyzer among few other customizations, uses WhitespaceTokenizer
and LoweCaseFilter

Thanks a lot.

-Shankar


On Thu, May 23, 2013 at 4:34 AM, Erick Erickson <erickerick...@gmail.com>wrote:

Please post the results of adding &debug=query to the URL.
That'll tell us what the query parser spits out which is much
easier to analyze.

Best
Erick

On Wed, May 22, 2013 at 12:16 PM, Shankar Sundararaju
<shan...@ebrary.com> wrote:
> This query returns 0 documents: *q=(+Title:() +Classification:()
> +Contributors:() +text:())*
>
> This returns 1 document: *q=doc-id:3000*
>
> And this returns 631580 documents when I was expecting 0: *q=doc-id:3000
> AND (+Title:() +Classification:() +Contributors:() +text:())*
>
> Am I missing something here? Can someone please explain? I am using Solr
> 4.2.1
>
> Thanks
> -Shankar




--
Regards,
*Shankar Sundararaju
*Sr. Software Architect
ebrary, a ProQuest company
410 Cambridge Avenue, Palo Alto, CA 94306 USA
shan...@ebrary.com | www.ebrary.com | 650-475-8776 (w) | 408-426-3057 (c)

Reply via email to