Lucene: how to boost some specific field

旧街凉风 提交于 2019-11-29 03:58:36

Here is how you can do that:

Query titleQuery, viewsQuery;

titleQuery.setBoost(0.8);
viewsQuery.setBoost(0.2);
BooleanQuery query = new BooleanQuery();
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required

// use query to search documents

The score will be proportional to 0.8*score(titleQuery) + 0.2*score(viewsQuery) (to a multiplicative constant).

To leverage your views field, you will probably need to use a ValueSourceQuery.

You can boost in 3 ways. Depending on your needs you might want to employ a combination

Document level boosting - while indexing - by calling document.setBoost() before a document is added to the index.

Document's Field level boosting - while indexing - by calling field.setBoost() before adding a field to the document (and before adding the document to the index).

Query level boosting - during search, by setting a boost on a query clause, calling Query.setBoost().

source: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!