Search code examples
solr

How to respect Solr conditions in order


I need to send a query to Solr with two conditions in OR, instead of sending the query twice:

{!complexphrase inOrder=true}title:"some tests*" || title:(some tests*)

.. where, in the first condition, I want the precise result. If not found, then it goes to OR and retrieves any result that has at least one word in the search phrase. But when I launch the query, I still get the right condition results first.

Here is my data:

{
    "title": "some values"
},
{
    "title": "data tests"
},
{
    "title": "some tests"
}

The response I need is:

{
    "title": "some tests"
},
{
    "title": "data tests"
},
{
    "title": "some values"
}

I already tried using boosting, like so: {!complexphrase inOrder=true}title:"some tests*"^2 || title:(some tests*)^1 but didn't work. I am NOT able to change the Solr configuration since it's a software that's already in production and not managed by me. I even cannot sort by rating, infact I don't receive best occurences first. Solr version is 7.3.1. Any help is appreciated, thanks in advance!


Solution

  • I solved it with a work-around. Instead of putting two OR conditions, I managed to apply a working boost on the title field, using edismax.

    What I had to change in my Java application was:

    From

    SolrQuery q = new SolrQuery("*");
    

    To

    SolrQuery q = new SolrQuery("(" + query + "*)");
    

    and added:

    q.set("defType", "edismax");
    q.set("qf", "title^100");
    

    Now, I'm not making a precise query but I'm retrieving documents with a higher match first without changing any configuration! The Solr Frontend equivalent is similar, but the query should look like this:

    http://localhost:8983/solr/mycollection/select?defType=edismax&q=(some%20test*)&qf=title^100
    

    Hope it helps someone