Lucene: как усилить какое-то конкретное поле - PullRequest
10 голосов
/ 22 марта 2012

В моем случае документы имеют два поля, например, «заголовок» и «виды»."views" - это количество посещений этого документа людьми.как: "title": "iphone", "views": "10".Мне нужно разработать стратегию, которая будет присваивать просмотрам некоторые веса, например, оценка релевантности рассчитывается по баллу (название) * 0,8 + оценка (просмотры) * 0,2.Может ли Lucene сделать это?И я хочу знать, есть ли какие-нибудь алгоритмы, связанные с этим вопросом.

Ответы [ 2 ]

10 голосов
/ 23 марта 2012

Вот как вы можете это сделать:

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

Оценка будет пропорциональна 0.8*score(titleQuery) + 0.2*score(viewsQuery) (мультипликативной константе).

Чтобы использовать поле views, вам, вероятно, потребуется использовать ValueSourceQuery .

8 голосов
/ 23 марта 2012

Вы можете повысить в 3-х способов. В зависимости от ваших потребностей вы можете использовать комбинацию

Повышение уровня документа - при индексации - путем вызова document.setBoost () перед добавлением документа в индекс.

Повышение уровня поля документа - при индексации - путем вызова field.setBoost () перед добавлением поля в документ (и перед добавление документа в указатель).

Повышение уровня запроса - во время поиск, установив повышение предложения, вызов Query.setBoost ().

источник: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

...