#574: Conversion of Invenio query syntax to the Solr one
------------------------+------------------------------------------
  Reporter:  jani       |      Owner:  jani
      Type:  defect     |     Status:  new
  Priority:  critical   |  Milestone:
 Component:  WebSearch  |    Version:  v0.99.3
Resolution:             |   Keywords:  syntax Solr full text search
------------------------+------------------------------------------

Comment (by rchyla):

 Replying to [ticket:574 jani]:
 > (This task is relevant to the use case where Invenio uses external Solr
 full-text index)
 > The default Solr syntax is quite different from the Invenio/INSPIRE one:
 > http://lucene.apache.org/java/2_9_1/queryparsersyntax.html
 > e.g.
 > * '+' != AND

 The semantics of + is quite different from AND; AND joines clauses, "+" is
 unary operator.

 But I am surprised that AND is a problem inside Invenio, I thought that
 the search is implemented as a search unit that receives one clause and
 then search_engine combines it. Ie. the query "this +that"
 is parsed into two clauses and two searches are done: 1) this, 2)that --
 then combined. AND should not be sent to Solr.

 But apparently it is not the case.

 > * OR is the default operator!

 You can change default operators int the config
 <requestHandler....>
 <lst name="defaults">
        <str name="defType">iq</str>
        <str name="q.op">AND</str>
      </lst>
 </requestHandler>

 > * '|' is not recognized
 > * only operators written in capital letters are recognized
 >
 > Two solutions are possible:
 > * a syntax converter in search_engine.py
 > * a custom Solr plugin as descrited here:
 http://wiki.apache.org/solr/SolrPlugins#QParserPlugin


 The custom solr plugin is not the solution, I had to change the syntax
 parser grammar (for solrpie and now it does recognize "|" and lowercase
 'and', 'or', 'not' now -- even the strange things like '|word') It was not
 easy, as lucene and Invenio understand some things differently, but it is
 possible. For this stage, only the syntax converter in search_engine.py
 can be the viable option.

-- 
Ticket URL: <http://invenio-software.org/ticket/574#comment:1>
Invenio <http://invenio-software.org>

Reply via email to