Hi, Phrase match via “pf” requires the target field to contain a phrase. A phrase is defined as multiple tokens. Yours does not contain a phrase since you use the KeywordTokenizer, leaving only one token in the field. eDismax pf will thus never kick in. Please point your “pf” towards a tokenized field.
If what you are trying to achieve is to boost only when the whole query exactly matches the full content of the field, then have a look at my solution here https://github.com/cominvent/exactmatch -- Jan Høydahl, search solution architect Cominvent AS - www.cominvent.com > 5. apr. 2016 kl. 19.10 skrev jimi.hulleg...@svensktnaringsliv.se: > > Some more input, before I call it a day. Just for the heck of it, I tried > changing minClauseSize to 0 using the Eclipse debugger, so that it didn't > return null at line 1203, but instead returned the TermQuery on line 1205. > Then everything worked exactly as it should. The matching document got > boosted as expected. And in the explain output, this can be seen: > > [...] > 11.274228 = (MATCH) weight(exactTitle:some words^100.0 in 172) > [DefaultSimilarity], result of: > [...] > > So. In my case, having minClauseSize=2 on line 550 (line 565 for solr 5.5.0) > is the culprit. Is this a bug, or am I using the pf in the wrong way? Can > someone explain why minClauseSize can't be set to 0 here? The comment simply > states "we need at least two or there shouldn't be a boost", but no > explaination *why* at least two is needed. > > Regards > /Jimi > > -----Original Message----- > From: jimi.hulleg...@svensktnaringsliv.se > [mailto:jimi.hulleg...@svensktnaringsliv.se] > Sent: Tuesday, April 5, 2016 6:51 PM > To: solr-user@lucene.apache.org > Subject: RE: Can't get phrase field boosting to work using edismax > > I now used the Eclipse debugger, to try and see if I can understand what is > happening, I it seems like the ExtendedDismaxQParser simply ignores my pf > parameter, since it doesn't interpret it as a phrase query. > > https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.6.0/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java > > On line 1180 I get a query object of type TermQuery (with the term > "exactTitle:some words"). And in the if statements starting at line it is > quite clear that if it is not a PhraseQuery or a MultiPhraseQuery, or if the > minClauseSize > 1 (and it is set to 2 on line 550) the method simply returns > null (ie ignoring my pf parameter). Why is this happening? > > I use Solr 4.6 by the way... I forgot to mention that in my original message. > > > -----Original Message----- > From: jimi.hulleg...@svensktnaringsliv.se > [mailto:jimi.hulleg...@svensktnaringsliv.se] > Sent: Tuesday, April 5, 2016 5:36 PM > To: solr-user@lucene.apache.org > Subject: RE: Can't get phrase field boosting to work using edismax > > OK. Interesting. But... I added a solr.TrimFilterFactory at the end of my > analyzer definition. Shouldn't that take care of the added space at the end? > The admin analysis page indicates that it works as it should, but I still > can't get edismax to boost. > > -----Original Message----- > From: Jack Krupansky [mailto:jack.krupan...@gmail.com] > Sent: Tuesday, April 5, 2016 4:42 PM > To: solr-user@lucene.apache.org > Subject: Re: Can't get phrase field boosting to work using edismax > > It looks like the code constructing the boost phrase for pf will always add a > trailing blank, which is never a problem when a normal tokenizer is used that > removes white space, but the keyword tokenizer will preserve that extra > space, which prevents an exact match. > > See line 531: > https://github.com/apache/lucene-solr/blob/releases/lucene-solr/5.5.0/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java > > I'd say it's a bug, but more a narrow use case that wasn't considered or > tested. > > -- Jack Krupansky > > On Tue, Apr 5, 2016 at 7:50 AM, <jimi.hulleg...@svensktnaringsliv.se> wrote: > >> Hi, >> >> I'm trying to boost documents using a phrase field boosting (ie the pf >> parameter for edismax), but I can't get it to work (ie boosting >> documents where the pf field match the query as a phrase). >> >> As far as I can tell, solr, or more specifically the edismax handler, >> does >> *something* when I add this parameter. I know this because the QTime >> increases from around 5-10ms to around 30-40 ms, and the score explain >> structure is *slightly* modified (though with the same final score for >> all documents). But nowhere in the explain structure can I see >> anything about the pf. And I can't understand that. Shouldn't it be >> included in the explain? If not, is there any way to force it to be included >> somehow? >> >> The query looks something like this: >> >> >> ?q=some+words&rows=10&sort=score+desc&debugQuery=true&fl=objectid,exac >> tTitle,score%2C%5Bexplain+style%3Dtext%5D&qf=title%5E2&qf=swedishText1 >> %5E1&defType=edismax&pf=exactTitle%5E5&wt=xml&indent=true >> >> >> I have one document that has the title "some words", and when I do a >> simple query filter with exactTitle:"some words" I get a match for >> that document. So then I would expect that the query above would boost >> this document, and include information about this in the explain. But >> nothing like this happens, and I can't understand why. >> >> The field looks like this: >> >> <field name="exactTitle" type="keywordText" indexed="true" stored="true" >> required="false" multiValued="false" /> >> >> And the fieldType looks like this: >> >> <fieldType name="keywordText" class="solr.TextField" >> positionIncrementGap="100"> >> <analyzer> >> <charFilter >> class="solr.HTMLStripCharFilterFactory" /> >> <tokenizer >> class="solr.KeywordTokenizerFactory" /> >> <filter >> class="solr.LowerCaseFilterFactory" /> >> </analyzer> >> </fieldType> >> >> >> I have also tried boosting this document using a boost query, ie >> bq=exactTitle:"some words", and this works as expected. The document >> score is boosted, and the explain states this very clearly, with this >> segment: >> >> [...] >> 9.870669 = (MATCH) weight(exactTitle:some words^5.0 in 12) >> [DefaultSimilarity], result of: >> [...] >> >> Why is this working, but q=some+words&pf=exactTitle^5 not? Shouldn't >> edismax rewrite my "pf query" into something very similar to the "bq query"? >> >> Regards >> /Jimi >>