Чтобы увеличить определенное значение определенного поля (или наоборот), вы можете использовать Function score query
. Проверьте официальный документ Здесь .
Позвольте мне показать вам пример:
POST /goods/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "shoes"
}
},
"functions": [
{
"filter": {
"term": {
"maker": "nike"
}
},
"weight": 0
}
],
"boost_mode": "multiply"
}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
]
}
Этот запрос ссылается на то, что «Я ищу документы, соответствующие ключевому слову shoes
в поле name
и отсортируйте в обратном порядке _score
. Однако если в документах есть термин nike
в поле maker
, я надеюсь, что оценка будет равна 0 (так как умножение любого числа на 0 равно 0). "
В Java коде,
String indexName = "goods"
String nameField = "name";
String makerField = "maker";
String keyword = "shoes";
String unnecessaryMaker = "nike";
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder(nameField, keyword);
FilterFunctionBuilder[] filterFunctions = {
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
QueryBuilders.termQuery(makerField, unnecessaryMaker),
ScoreFunctionBuilders.weightFactorFunction(0)
)
};
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(matchQueryBuilder, filterFunctions);
functionScoreQueryBuilder.boostMode(CombineFunction.MULTIPLY);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(functionScoreQueryBuilder);
SearchRequest request = new SearchRequest();
request.indices(indexName);
request.source(searchSourceBuilder);
Есть несколько boost_mode
, таких как умножение (по умолчанию), замена, сумма, среднее, максимальное, минимальное. Таким образом, вы можете применить этот код для своих нужд.
Надеюсь, это именно то, что вы искали.