在结果集中缩放字段值
Scaling a field value within the result set
我正在使用 scale 函数来规范化 1 到 3 之间的字段值。问题是这些值不是相对于结果集规范化的,而是相对于所有索引文档规范化的。
例如:
/select?q=id:173540413&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1.9903924
/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1.9903924
173540377,1.9903922
期望的结果是:
/select?q=id:173540413&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1
/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,2
173540377,1
是否有其他方法可以缩放结果,或许不使用缩放?
您可以使用 Stats Component 为您的集合获取 min/max 值,然后在您的中间件中自行缩放。
stats / stats_fields / fieldname
下面的元素应该有一个 min
和 max
键来指示查询结果中值的极端值。
在 Solr 中有一种迂回的方法可以实现这一点。
Solr 的缩放函数在用于 依赖于查询 的字段时与用于 不 的字段时表现不同。
因此,当您尝试缩放不依赖于查询的 'id' 字段时,Solr 会考虑缩放整个文档集。这将改变您的最小值和最大值,使其取自整个 doc-set 而不是查询结果集。然而,当您缩放查询相关值时,例如 query($q) (这是文档的 TF-IDF 文本相似度得分针对搜索项),Solr 仅考虑搜索结果集来获取缩放的最小值和最大值。
现在,我们要的是第二个选项。所以,我们做这样的事情:
q=searchterm&fl=id,scale(sub(sum(id,query($q)),query($q)), 1, 2)
这就是我们对字段所做的:id + query($q) - query($q)
这让 Solr 认为这是一个依赖于查询的字段,而实际上它的计算结果是相同的 'id' 字段。这将为您提供一个平滑的 [1,2] 基于范围的缩放。
除了 scale(),我相信这种方法也适用于其他函数查询,比如 max( ) 和 min() 对整个文档集进行操作,而不仅仅是查询结果集。
我正在使用 scale 函数来规范化 1 到 3 之间的字段值。问题是这些值不是相对于结果集规范化的,而是相对于所有索引文档规范化的。
例如:
/select?q=id:173540413&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1.9903924
/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1.9903924
173540377,1.9903922
期望的结果是:
/select?q=id:173540413&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,1
/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2)
id,"scale(id, 1, 2)"
173540413,2
173540377,1
是否有其他方法可以缩放结果,或许不使用缩放?
您可以使用 Stats Component 为您的集合获取 min/max 值,然后在您的中间件中自行缩放。
stats / stats_fields / fieldname
下面的元素应该有一个 min
和 max
键来指示查询结果中值的极端值。
在 Solr 中有一种迂回的方法可以实现这一点。
Solr 的缩放函数在用于 依赖于查询 的字段时与用于 不 的字段时表现不同。
因此,当您尝试缩放不依赖于查询的 'id' 字段时,Solr 会考虑缩放整个文档集。这将改变您的最小值和最大值,使其取自整个 doc-set 而不是查询结果集。然而,当您缩放查询相关值时,例如 query($q) (这是文档的 TF-IDF 文本相似度得分针对搜索项),Solr 仅考虑搜索结果集来获取缩放的最小值和最大值。
现在,我们要的是第二个选项。所以,我们做这样的事情:
q=searchterm&fl=id,scale(sub(sum(id,query($q)),query($q)), 1, 2)
这就是我们对字段所做的:id + query($q) - query($q)
这让 Solr 认为这是一个依赖于查询的字段,而实际上它的计算结果是相同的 'id' 字段。这将为您提供一个平滑的 [1,2] 基于范围的缩放。
除了 scale(),我相信这种方法也适用于其他函数查询,比如 max( ) 和 min() 对整个文档集进行操作,而不仅仅是查询结果集。