Lucene: увеличить оценку, когда найдены два термина

Я ищу документы, содержащие два термина «один два» в разных полях (например, заголовок, содержание и т. д.). Пример в PyLucene:

query = "one two"
clauses = []
for field in fields:
    clauses.append(BooleanClause.Occur.SHOULD)

query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, query, fields, clauses, analyzer)

Я хотел бы получить все документы, содержащие термин («один» или «два») и («один» и «два»), и документы, содержащие оба, должны получить более высокий балл. Когда я использую запрос типа «один и два» или «один два»~n, я получаю только эти документы.

Есть ли способ повысить что-то вроде нескольких матчей?

Спасибо.


person Peter Clause    schedule 02.10.2014    source источник
comment
вы хотите повысить документы, где один два представлены в разных областях?   -  person Mysterion    schedule 02.10.2014
comment
Нет, я хочу усилить документы с обоими терминами в одной и той же области.   -  person Peter Clause    schedule 02.10.2014


Ответы (1)


Если вы ищете повышение на определенное значение «один-два», вы можете использовать повышение запроса близости, предоставляемое SpanNearQuery.

http://lucene.apache.org/core/4_6_0/core/org/apache/lucene/search/spans/SpanNearQuery.html

Например, в Java у вас будет что-то вроде: ...

SpanTermQuery[] spanQueryClauses = new SpanTermQuery[terms.length];
for (int i = 0; i < terms.length; i++) {
    spanQueryClauses[i] = new SpanTermQuery(terms[i]);
}
SpanNearQuery spanNearQuery = new SpanNearQuery(
              spanQueryClauses, slop, true);
spanNearQuery.setBoost(2.0f);
person AR1    schedule 18.10.2014