这有点奇怪,虽然对我们这些在电子商务世界工作的人来说并非如此。
我在英国最大的儿童零售商之一工作。我们目前正在联合演示我们的电子商务平台,其中包括Elasticsearch的所有内容,而不是我们目前用于搜索的第三方解决方案。第三方解决方案每个月花费我们数千英镑,因为在ES之外运行整个网站(搜索,范围页面和产品详细信息页面)所需的架构实际上只花费了一小部分。
我目前通过ES工作的大部分功能都很好。但是,我们的内容协调员确实需要(通过我们设计的CMS)来提升某些VIP产品,但是基于所提供的查询。他们知道文档ID,他们知道他们想要提升产品的查询字符串。我可以使用连接器编写CMS以将此信息输入ES,但我不确定下一步该做什么。
我考虑的三个选项如下:
然后使用function_score机制应用这些增强因子。你会选哪一个?为什么?有没有我错过的选择?
答案 0 :(得分:0)
好的,我设法让这个工作,有点......我不得不将我的查询分成2个查询。我创建了一个新索引,我们称之为boostvalues
。在boostvalues
我有以下字段:
然后,对于每个进入的搜索查询,我首先搜索boostvalues
索引。然后我使用任何返回的结果来动态填充function_score参数,如下所示:
if(isset($boostResults) && is_array($boostResults) && (int)$boostResults['hits']['total']>0) {
foreach($boostResults['hits']['hits'] as $boostValue) {
$searchParams['body']['query']['function_score']['functions'][] = array(
"filter" => array("term" => array("id" => $boostValue['_source']['id'])),
"script_score" => array("script" => $boostValue['_source']['boostFactor'])
);
}
}
顺便说一句,我正在使用官方的Elasticsearch PHP库。这给出了期望的效果。在我尝试之前我没有意识到的这种机制的优点是,当获得提升值时,我还可以使用函数评分来根据查询与存储的查询字符串的接近程度来修改提升因子。