Hi, Mikhail.
Shouldn't be a big deal
"bool":{
     "must":[ "x",
            {"bool":
                 {"should":["y","z"]}}]
}

On Tue, Dec 8, 2020 at 6:13 AM Mikhail Edoshin <mikh...@onegasoft.com>
wrote:

> Hi,
>
> I'm more or less new to Solr. I need to run queries that use joins all
> over the place. (The idea is to index database records pretty much as
> they are and then query them in interesting ways and, most importantly,
> get the rank. Our dataset is not too large so the performance is great.)
>
> I managed to express the logic using the following approach. For
> example, I want to search people by their names or addresses:
>
>    q=type:Person^=0 AND ({!edismax qf=<personFields> v=$p0} OR {!join
> <personToAddress> v=$p1})
>    p1={!edismax qf=<addressFields> v=p0}
>    p0=<queryText>
>
> (Here 'type:Person' works as a filter so I zero its score.) This seems
> to work as expected and give the right results and ranking. It also
> seems to scale nicely for two levels of joins, although the queries
> become rather hard to follow in their raw form (I used a custom
> XML-to-query transformer to actually formulate more complex queries).
>
> So my question is that: can I express an equivalent query using the
> query DSL? I know I can use 'bool' like that:
>
> {
>    "query": {
>       "bool" : {
>          "must" : [ ... ];
>          "should" : [ ... ]
>        }
>     }
>   }
>
> But how do I actually go from 'x AND (y OR z)' to 'bool' in the query
> DSL? I seem to lose the nice compositional properties of the expression.
> Here, for example, the expression implies that at least 'y' or 'z' must
> match; I don't quite see how I can express this in the DSL.
>
> Kind regards,
> Mikhail
>


-- 
Sincerely yours
Mikhail Khludnev

Reply via email to