elasticsearch:在给定值的给定字段上应用额外的提升
elasticsearch: applying an additional boost on a given field for a given value
我有一个使用 FOSElasticaBundle.
的 Symfony 2.7.6 应用程序
我有两种搜索类型:
一个没有关键字,在这种情况下只应用过滤器并且所有文档得分都是1(有时随机排序),在这种情况下主要查询是:
$query = new Elastica\Query\MatchAll();
一个带有关键字,应用了相同的过滤器,并且匹配项再次是 运行 字段列表(具有不同的提升)。结果按分数存储。现在的主要查询是:
$match = new Elastica\Query\MultiMatch();
$match->setQuery($keyword);
$match->setOperator('AND');
$match->setFields([
'field1^30',
'field2',
'field3',
'field4',
'_all'
]);
这 2 个搜索效果很好。
现在,对于这两个搜索,我希望对给定的字段值应用动态提升。比方说:if field5 == 'value' then add boost 15
,(15只是一个例子,我们会做测试看看要选择什么额外的提升值)这里使用的值不是关键字,它是另一个参数。
我尝试了 FunctionScore
和 Boosting
查询,但没有成功。任何带有非常简单的弹性搜索查询的提示都将不胜感激。
这个怎么样:
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "blabla",
"operator": "AND",
"fields": [
"field1^30",
"field2",
"field3",
"field4",
"_all"
]
}
},
"functions": [
{
"filter": {
"term": {
"field5": "some_value"
}
},
"boost_factor": 15
}
]
}
}
}
我有一个使用 FOSElasticaBundle.
的 Symfony 2.7.6 应用程序我有两种搜索类型:
一个没有关键字,在这种情况下只应用过滤器并且所有文档得分都是1(有时随机排序),在这种情况下主要查询是:
$query = new Elastica\Query\MatchAll();
一个带有关键字,应用了相同的过滤器,并且匹配项再次是 运行 字段列表(具有不同的提升)。结果按分数存储。现在的主要查询是:
$match = new Elastica\Query\MultiMatch(); $match->setQuery($keyword); $match->setOperator('AND'); $match->setFields([ 'field1^30', 'field2', 'field3', 'field4', '_all' ]);
这 2 个搜索效果很好。
现在,对于这两个搜索,我希望对给定的字段值应用动态提升。比方说:if field5 == 'value' then add boost 15
,(15只是一个例子,我们会做测试看看要选择什么额外的提升值)这里使用的值不是关键字,它是另一个参数。
我尝试了 FunctionScore
和 Boosting
查询,但没有成功。任何带有非常简单的弹性搜索查询的提示都将不胜感激。
这个怎么样:
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "blabla",
"operator": "AND",
"fields": [
"field1^30",
"field2",
"field3",
"field4",
"_all"
]
}
},
"functions": [
{
"filter": {
"term": {
"field5": "some_value"
}
},
"boost_factor": 15
}
]
}
}
}