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);