I struggled with something very similar today, which turned our search model upside down as in Solr 8+ edismax uses sow=false by default and it was true in Solr 6 (where we upgraded from), but after adding this my handler things were back to normal.
On Thu, Apr 29, 2021 at 11:45 AM Ere Maijala <ere.maij...@helsinki.fi> wrote: > Ah, yes, that seems to be the case. Thanks for the pointer! Also the > discussion is enlightening. It looks like there hasn't been much > happening in that bug so I'll need to consider any other options. > > --Ere > > Jan Høydahl kirjoitti 29.4.2021 klo 11.48: > > I think you are hitting this bug > https://issues.apache.org/jira/browse/SOLR-12779 > > > > Jan > > > >> 29. apr. 2021 kl. 08:51 skrev Ere Maijala <ere.maij...@helsinki.fi>: > >> > >> Hello Markus, > >> > >> Thanks for the reply. I'm not sure I understand. The docs state the > following: > >> > >> "The default value of mm is 0% (all clauses optional), unless q.op is > specified as "AND", in which case mm defaults to 100% (all clauses > required)." > >> ( > https://solr.apache.org/guide/8_8/the-dismax-query-parser.html#TheDisMaxQueryParser-Themm_MinimumShouldMatch_Parameter > ) > >> > >> And obviously it has effect. You can also replace q.op=AND with > mm=100%25 in my examples with the same results. The multi-word synonym > makes the query explained by debugQuery=true seem wrong to me in that it > requires all terms to match in the same field, whereas normally the match > can be found in any of the fields listed in qf. For example this is the > query from my first example: > >> > >> +(+DisjunctionMaxQuery((name:corsair | manu:corsair | cat:corsair)) > +DisjunctionMaxQuery((name:microsystems | manu:microsystems | > cat:microsystems)) +DisjunctionMaxQuery((name:memory | manu:memory | > cat:memory))) > >> > >> Using the synonym instead of `corsair microsystems` produces this: > >> > >> +(+((+name:corsair +name:microsystems +name:memory) | (+manu:corsair > +manu:microsystems +manu:memory) | (+cat:cmi +cat:memory))) > >> > >> We don't use stopwords. mm.autoRelax does not make a difference here. > >> > >> Best, > >> Ere > >> > >> Markus Jelsma kirjoitti 28.4.2021 klo 16.20: > >>> Hello Ere, > >>> The q.op parameter is not a dismax parameter. instead i think you are > being > >>> bitten bij de mm parameter [1] which by default is 100%, meaning all > terms > >>> must match. Multi word synonym handing and mm are not a very intuitive > >>> match, and can lead to crazy problems. Also beware of mm and stopword > >>> handling and check out mm.autoRelax [2]. But it is best not to use > >>> stopwords at all. > >>> Check it out, > >>> Markus > >>> [1] https://solr.apache.org/guide/6_6/the-dismax-query-parser.html > >>> [2] > https://solr.apache.org/guide/6_6/the-extended-dismax-query-parser.html > >>> Op wo 28 apr. 2021 om 15:02 schreef Ere Maijala < > ere.maij...@helsinki.fi>: > >>>> Hi, > >>>> > >>>> Here's one that I can't wrap my head around. The main question is: why > >>>> are the search terms treated differently in eDisMax if the query > expands > >>>> to a multi-word synonym, and there are different field types and > q.op=AND? > >>>> > >>>> This gets complicated quickly, so I tried to reproduce the results > with > >>>> the techproducts example: > >>>> > >>>> 1. Start with vanilla Solr 8.8.2 > >>>> > >>>> 2. echo "cor => Corsair" >> > >>>> server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt > >>>> > >>>> 4. echo "cmi => Corsair Microsystems" >> > >>>> server/solr/configsets/sample_techproducts_configs/conf/synonyms.txt > >>>> > >>>> 4. bin/solr start -e techproducts > >>>> > >>>> > >>>> Now, a basic query that works fine produces 2 results: > >>>> > >>>> > >>>> > http://localhost:8983/solr/techproducts/select?q=corsair+microsystems+memory&debugQuery=true&defType=edismax&qf=name+manu+cat&q.op=AND > >>>> > >>>> But if I use the synonym, I don't get any results: > >>>> > >>>> > >>>> > http://localhost:8983/solr/techproducts/select?q=cmi+memory&debugQuery=true&defType=edismax&qf=name+manu+cat&q.op=AND > >>>> > >>>> If I leave cat field out, however, I get 2 results: > >>>> > >>>> > >>>> > http://localhost:8983/solr/techproducts/select?q=cmi+memory&debugQuery=true&defType=edismax&qf=name+manu&q.op=AND > >>>> > >>>> Also if leave q.op out and add AND between the terms, I get 2 results > >>>> even with the cat field: > >>>> > >>>> > >>>> > http://localhost:8983/solr/techproducts/select?q=cmi+AND+memory&debugQuery=true&defType=edismax&qf=name+manu+cat > >>>> > >>>> The single-word synonym works just fine: > >>>> > >>>> > >>>> > http://localhost:8983/solr/techproducts/select?q=cor+memory&debugQuery=true&defType=edismax&qf=name+manu+cat&q.op=AND > >>>> > >>>> > >>>> Can anyone shine a light on what's happening here? > >>>> > >>>> Additional notes: > >>>> > >>>> 1. This is a simplified example, and the real-world case is much more > >>>> complicated. It has our custom class create the synonyms for compound > >>>> words in Finnish, and the queries come from users. > >>>> > >>>> 2. As far as I can see mm doesn't affect the results in any meaningful > >>>> way, but I just might be doing something wrong. > >>>> > >>>> 3. I included the debugQuery parameter so that it's easy to see how > >>>> different the queries become. > >>>> > >>>> Best Regards, > >>>> Ere > >>>> > >>>> -- > >>>> Ere Maijala > >>>> Kansalliskirjasto / The National Library of Finland > >>>> > >> > >> -- > >> Ere Maijala > >> Kansalliskirjasto / The National Library of Finland > > > > -- > Ere Maijala > Kansalliskirjasto / The National Library of Finland >