[
https://issues.apache.org/jira/browse/SOLR-16953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17761857#comment-17761857
]
Pierre Salagnac commented on SOLR-16953:
----------------------------------------
I already experienced similar issues with {{edismax}} parser in the past
because of very naive string parsing.
The issue is in pre-parsing (before JavaCC) more specifically in method
{{{}splitIntoClauses(){}}}. When we have a query like {{{}foo:(aa bb){}}}, it
correctly parses it into two clauses, but only the first one has a user
specified field. Second one has {{null}} value for the field.
Then, when we handle the {{pf}} parameter in post-parsing (method
{{{}addPhraseFieldQueries{}}}), we only consider clauses with a non null field.
That's why in the above example token {{aa}} is ignored when handling {{pf}}
parameter while token {{bb}} is taken into account.
> Wrong parsing when using pf parameter
> -------------------------------------
>
> Key: SOLR-16953
> URL: https://issues.apache.org/jira/browse/SOLR-16953
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Affects Versions: 9.2.1
> Reporter: Monica Marrero
> Priority: Major
>
> The parsing of the query for the _pf_ parameter is wrong.
> Reference to user mailing list: [Edismax parsing when using pf
> parameter|https://lists.apache.org/thread/r1ztqzn4hy4fr976wghm2bv9p8sh0cmm]
> Examples using edismax and techproducts collection in Solr v9.2.1,
> _defType=edismax, pf=text_ _name_ :
> a) Query= name:george AND (game AND thrones)
> Result= "parsedquery_toString":"+({+}name:george +({+}(text:game)
> +(text:thrones))) (text:\"game thrones\" | name:\"game thrones\")"
> b) Query= name:(george AND martin) AND (game AND thrones)
> Result= "parsedquery_toString":"{+}({+}(+name:george +name:martin)
> {+}({+}(text:game) +(text:thrones))) (text:\"{*}martin{*} game thrones\" |
> name:\"
> *martin* game thrones\")"
> Test by [[email protected]]:
> $ curl -sS [http://localhost:8983/solr/techproducts/select] -d 'debug=query'
> -d 'defType=edismax' -d 'pf=text name' -d 'q=content:(XXX AND YYY AND ZZZ)
> AND (AAA AND BBB)' | grep '"parsedquery'
> "parsedquery":"{+}({+}(+content:xxx +content:yyy +content:zzz)
> +(+DisjunctionMaxQuery((text:aaa)) +DisjunctionMaxQuery((text:bbb))))
> DisjunctionMaxQuery((name:\"yyy zzz aaa bbb\" | text:\"yyy zzz aaa
> bbb\"))",
> "parsedquery_toString":"{+}({+}(+content:xxx +content:yyy +content:zzz)
> {+}({+}(text:aaa) +(text:bbb))) (name:\"yyy zzz aaa bbb\" | text:\"yyy zzz aaa
> bbb\")"
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]