是时候用 ES 拯救发际线啦

function_score

匿名 | 发布于2016年04月22日 | 阅读数:6103

 
'query'   => [
'function_score' => [
'query' => [
'bool' => [
'must' => $query,
'filter' => $filter,
],
],
// "field_value_factor" => [
// 'field' => 'vote',
// "modifier" => "log1p",
// ],
"script_score" => [
"script" => " _score*log(1 + doc['vote'].value) ",
],
],
],
1.为什么 
script_score 与
field_value_factor
算出的_score的值不一样。

2.另:
我现在有一个字段,tag, 里面存的是数组,我想依据tag的个数来进行加权。
我是不是要写
"script_score" => [
"script" => "_score * doc['tag'].values.length",
],
或者说能用field_value_factor 么?
还是我的用法不对。新手。
求指教.
3.我在function_score中,能不能对字段的值进行转换,现在的情况是我有一个字段存储的是 字符串,是价位 price如:500万元,我希望用 price 在
field_value_factor 或
script_score 中进行调用,请问怎么办。实在不行的话,我就存储的时候 ,转成数字。
已邀请:

helloes

赞同来自: hello

1、vote字段是什么数据类型的?确定是数值型的吗?
 
2、我还是觉得增加一个数值型字段存数组的大小比较好
 
3、price字段的值有可能是美元的吗?

hello

赞同来自:

首先,谢回复~
 
1.是数值,确定
2.好,我已经打算新搞字段了。
3.同2,已打算新搞字段。如果该情况 不再新弄一个字段的话,并且不考虑美元,就是 万元 统一 格式的话,有解决方案么?
 
另:多问一句
目前我们使用的数据存储是 mongo,我们使用的是 mongo-connector 进行的数据索引至es。
我的问题是:像上面的例子,目前mongo里面我并没有字段存储 tag数组 的一个长度,请问,我不在mongo里面新加字段去存储的话,我能不能在同步es的时候,搞定这个事情。
 
其实说白了就是,我希望利用  mongo-connector  进行数据同步,同时又希望 es里面的字段与 mongo里面的有差异,并且我能自定义字段的值。不知道mongo-connector 是否支持。

要回复问题请先登录注册