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, я получаю только эти документы.

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

Благодарю.

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);
Другие вопросы по тегам