Hello.
This syntax is rather tricky. What's working most times is to extracting
subqueries into separate parameters:
q=+{!parent which="*:* -_nest_path_:*" v=$sub0} +{!parent which="*:*
-_nest_path_:*" v=$sub1}&sub0=context:(+hol? +h?la)&sub1=context:(adios)

On Fri, May 5, 2023 at 12:05 PM Igor Blanco <ibla...@binovo.es.invalid>
wrote:

> I'm using SOLR 9.2.1
>
> I have a parent document with a couple of subdocuments, something like
> this:
>
>     {
>
>     id: "1",
>
>     contexts: [
>
>          {
>
>             id: "CTX1",
>
>             context: "hola"
>
>         },{
>
>             id: "CTX2",
>
>             context: "adios"
>
>        }
>
>     ]
>
>     }
>
> When I try to execute this query:
>
>     ({!parent which="*:* -_nest_path_:*"}(context:(hol? AND h?la)) AND
>     {!parent which="*:* -_nest_path_:*"}(context:(adios)))
>
> I expected to receive document with id 1 as a response, but instead i
> receive this syntax error:
>
> org.apache.solr.search.SyntaxError: Cannot parse '(context:(hol?':
> Encountered \"<EOF>\" at line 1, column 14.\nWas expecting one of:\n
> <AND> ...\n    <OR> ...\n    <NOT> ...\n    \"+\" ...\n    \"-\" ...\n
> <BAREOPER> ...\n    \"(\" ...\n    \")\" ...\n    \"*\" ...\n    \"^\"
> ...\n    <QUOTED> ...\n    <TERM> ...\n    <FUZZY_SLOP> ...\n
> <PREFIXTERM> ...\n <WILDTERM> ...\n    <REGEXPTERM> ...\n    \"[\"
> ...\n    \"{\" ...\n    <LPARAMS> ...\n    \"filter(\" ...\n    <NUMBER>
> ...\n
>
>
> It explicitly says that found and <EOF> but that's not true, it is
> followed by and AND which is one of the expected values.
>
> As further information, I've been able to narrow the query to the point
> where this clause works but gives an empty result:
>
> {!parent which="*:* -_nest_path_:*"}context:(hola) AND id:1
>
> But this one throws the mentioned syntax error:
>
> id:1 AND {!parent which="*:* -_nest_path_:*"}context:(hola)
>
> After reading the documentation more thoroughly I think I found the
> explanation of why the first query is returning an empty result here:
> https://solr.apache.org/guide/8_0/the-standard-query-parser.html
>
> It says:
>
>     /Gotcha: Be careful not to start your query with {! at the very
>     beginning, which changes the parsing of the entire query string,
>     which may not be what you want if there are additional clauses./
>
> So the first query is using the block join query parser for everything
> and effectively the second clause after the AND is searching for id with
> value 1 in the children not the parent so the condition is never met and
> nothing is returned.
>
> The second one instead is using the standard parser for the first clause
> and the block join query parser for the second. In fact removing the
>
> Is this a bug or am I misinterpreting how different query parsers can be
> combined in a query?
>
> --
>
>
>       IgorBlanco
>
> Director desarrollo a medida | Neurrirako garapenen zuzendaria
>
> Binovo IT Human Project
>
>
>
>
>         943 569 206 <tel:943 569 206> | 690229375 <tel:690229375>
>
>         ibla...@binovo.es <mailto:ibla...@binovo.es>
>
>         binovo.es <//binovo.es>
>
>         Astigarragako Bidea, 2 - 2º izda. Oficina 10-11, 20180 Oiartzun
>
>
>
>
>
> youtube <https://www.youtube.com/user/CANALBINOVO/>
>         linkedin <
> https://www.linkedin.com/company/binovo-it-human-project/>
>


-- 
Sincerely yours
Mikhail Khludnev
https://t.me/MUST_SEARCH
A caveat: Cyrillic!

Reply via email to