I'm not sure here that I will be able to track somehow that different terms were matched to the same document...
I'm thinking more about little another way: when query scores some document - save the query term for that document somewhere. Probably it would be some map in some class SearchContext. I could write something like this: SearchContext sc = getSearchContext(); // - does such search context exist in Lucene? Maybe QueryContext sc.getDocTerms().get(docID).add(query.getTerm())); // docTerms here is a Map<Int, List<String>> - where the key - is a document ID and the value - is a list of terms by whom this document was matched. I need to save somewhere the document ID and the term matched that document. Could somebody advise me an appropriate place? Regards, Vadim Gindin On Tue, Dec 5, 2017 at 12:04 PM, Vadim Gindin <vgin...@detectum.com> wrote: > For example like this: > > BooleanQuery.Builder expected = new BooleanQuery.Builder(); > > Query param_vendor = new BoostQuery(new ConstantScoreQuery(new TermQuery(new > Term("param_vendor", queryStr))), 5f); > Query param_model = new BoostQuery(new ConstantScoreQuery(new TermQuery(new > Term("param_model", queryStr))), 5f); > Query param_value = new BoostQuery(new ConstantScoreQuery(new TermQuery(new > Term("param_value", queryStr))), 3f); > Query param_name = new BoostQuery(new ConstantScoreQuery(new TermQuery(new > Term("param_name", queryStr))), 4f); > > BooleanQuery bq = expected > .add(param_vendor, BooleanClause.Occur.SHOULD) > .add(param_model, BooleanClause.Occur.SHOULD) > .add(param_value, BooleanClause.Occur.SHOULD) > .add(param_name, BooleanClause.Occur.SHOULD) > .setMinimumNumberShouldMatch(1) > .build(); > > return new BoostQuery(bq, queryBoost); > > > Vadim > > On Tue, Dec 5, 2017 at 9:24 AM, Michael Sokolov <msoko...@gmail.com> > wrote: > >> Well how did you make the original query? >> >> On Dec 4, 2017 12:05 PM, "Vadim Gindin" <vgin...@detectum.com> wrote: >> >> > Yes, thanks. My question is exactly about how to create "another extra >> > query that requires all the terms in the original query" >> > >> > On Mon, Dec 4, 2017 at 6:50 PM, Michael Sokolov <msoko...@gmail.com> >> > wrote: >> > >> > > I'm just saying, that when you form your query, you could also create >> > > another extra query that requires all the terms in the original query, >> > and >> > > then combine it with the original query in a boolean where the >> original >> > > query is required and the extra query is optional. That will give a >> boost >> > > when all the terms are found, although I think the scores will be >> added, >> > > not multiplied. >> > > >> > > On Dec 4, 2017 5:22 AM, "Vadim Gindin" <vgin...@detectum.com> wrote: >> > > >> > > > Thanks, Michael! >> > > > >> > > > Yes, I'm sure. Could you explain your proposal in more detail? >> > > > >> > > > Regards, >> > > > Vadim Gindin >> > > > >> > > > On Mon, Dec 4, 2017 at 3:18 PM, Michael Sokolov <msoko...@gmail.com >> > >> > > > wrote: >> > > > >> > > > > You could combine a Boolean and query with the same terms, as an >> > > optional >> > > > > clause. Are you sure about the requirement to multiply the score >> in >> > > that >> > > > > case? >> > > > > >> > > > > On Dec 4, 2017 5:13 AM, "Vadim Gindin" <vgin...@detectum.com> >> wrote: >> > > > > >> > > > > > Hi all. >> > > > > > >> > > > > > I need to track that all query terms are matched in one >> document. >> > > When >> > > > > all >> > > > > > terms are matched I need to multiply the score of such document >> to >> > > some >> > > > > > constant coefficient. >> > > > > > >> > > > > >> > > > >> > > >> > >> > >