Hi Thomas, Apparently, the parser becomes more sensitive to special characters when the local parameter is in the middle of a query. Possibly because an increased need for context switching. Escaping parentheses worked for me though:
curl 'http://localhost:8983/solr/demo/select?rows=5&q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dfeatures%3A%5C%28hello%20with%20an%20accent%20over%20the%20e%5C%29' Previous example: curl 'http://localhost:8983/solr/demo/select?q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dname%3Athe%20%5C%28concept%5C%29.xml' Kind regards On 2024/09/16 21:23:39 Thomas Åkesson wrote: > Hi, > Thanks for suggesting local parameters. Unfortunately I can't refactor the > codebase to make use of them because these queries are placed in fq > statements that are treated as individual units by the UI. It would require > massive refactoring and higher complexity as a consequence. The graph > traversal is one of the possible fq statements but I am reproducing with > {!boost ...} because it is much simpler and possible to demonstrate with the > SolR demo dataset. > > I forgot to mention that I am reproducing with the SolR demo dataset, e.g.: > docker run --name solr_demo -d -p 8983:8983 solr solr-demo > > I have improved the sample queries to more clearly indicate that this is > likely a bug, see below. The debugQuery=true does not really help much since > the failure is earlier in the process. > > Fails: > curl > 'http://localhost:8983/solr/demo/select?q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dfeatures%3A%22%28hello%20with%20an%20accent%20over%20the%20e%29%22&rows=5&debugQuery=true' > > > Works: > curl > 'http://localhost:8983/solr/demo/select?q=%7B%21boost+b%3Dmanufacturedate_dt%7Dfeatures%3A%22%28hello%20with%20an%20accent%20over%20the%20e%29%22+AND+inStock:true&rows=5&debugQuery=false' > > NOTE: The only difference is moving the inStock:true part of the query to the > end. Should be equivalent. > > Cannot enable debugQuery because it fails with: > "msg":"java.lang.IllegalAccessException: access violation: class > org.apache.solr.schema.DatePointField$DatePointFieldSource, from public > Lookup", > > Thanks, > Thomas Å. > > > > On 14 Sep 2024, at 22:07, Mikhail Khludnev <mk...@apache.org> wrote: > > > > Hello Thomas. > > I think extensive use of local parameters references is easy than fighting > > with escaping > > q=inStock:true AND {!boost b=manufacturedate_dt v=$nameq}&nameq={!field > > f=name}the (concept).xml > > or even ...{!field f=name v=$nameval}&nameval=the (concept).xml > > also depending on the field type you'd better use {!term}. > > To continue post debugQuery=true output, when your query is parsed but > > misbehave. > > > > On Sat, Sep 14, 2024 at 11:57 AM Thomas Åkesson <th...@fastmail.se> > > wrote: > > > >> Hi, > >> We have come across a potentially incorrect lexical error with the > >> following combination in the query: > >> - Parentheses in the search term (tried both escaping and quoting) > >> - Query parser within {}. Actual use-case is using !graph but clearer > >> reproduction with something simple like !boost. > >> - Using AND before the {!something ...} query. > >> > >> This query fails: > >> curl ' > >> http://localhost:8983/solr/demo/select?q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dname%3Athe%2520%5C%28concept%5C%29.xml > >> ' > >> { > >> "responseHeader":{ > >> "status":400, > >> "QTime":1, > >> "params":{ > >> "q":"inStock:true AND {!boost > >> b=manufacturedate_dt}name:the%20\\(concept\\).xml" > >> } > >> }, > >> "error":{ > >> > >> "metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.parser.TokenMgrError"], > >> "msg":"org.apache.solr.search.SyntaxError: Cannot parse > >> 'name:the%20\\(concept\\': Lexical error at line 1, column 22. > >> Encountered: <EOF> (in lexical state 3)", > >> "code":400 > >> } > >> > >> > >> Fails when quoted (no escaping needed?): > >> curl ' > >> http://localhost:8983/solr/demo/select?q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dname%3A%22the%2520%28concept%29.xml%22 > >> ' > >> { > >> "responseHeader":{ > >> "status":400, > >> "QTime":1, > >> "params":{ > >> "q":"inStock:true AND {!boost > >> b=manufacturedate_dt}name:\"the%20(concept).xml\"" > >> } > >> }, > >> "error":{ > >> > >> "metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.parser.TokenMgrError"], > >> "msg":"org.apache.solr.search.SyntaxError: Cannot parse > >> 'name:\"the%20(concept': Lexical error at line 1, column 21. Encountered: > >> <EOF> after prefix \"\\\"the%20(concept\" (in lexical state 3)", > >> "code":400 > >> } > >> > >> Removing the closing parenthesis works: > >> curl ' > >> http://localhost:8983/solr/demo/select?q=inStock:true+AND+%7B%21boost+b%3Dmanufacturedate_dt%7Dname%3Athe%2520%5C%28concept.xml > >> ' > >> > >> Removing the statement before works: > >> curl ' > >> http://localhost:8983/solr/demo/select?q=%7B%21boost+b%3Dmanufacturedate_dt%7Dname%3Athe%2520%5C%28concept%5C%29.xml > >> ' > >> > >> > >> Has anyone seen this issue before? Tested with 8.3 and 9.6.1. > >> > >> Thanks in advance, > >> Thomas Å. > >> > >> > >> > >> > >> > >> > >> > >> > >> > > > > -- > > Sincerely yours > > Mikhail Khludnev > >