2015-07-10 58 views
0

我正在使用缩放函数来规范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 

有一些其他的方式来扩展的结果,可能不使用规模?

回答

1

有一个迂回的方式来实现这个在Solr。对一个字段是查询相关对一个字段是使用时VS使用时

Solr的缩放功能表现不同。

因此,当您试图缩放像'id'那样不依赖于查询的字段时,Solr会认为整个文档集要按比例缩放。这将改变您的最小值和最大值取自整个文档集而不是查询结果集。而当您缩放查询相关值(如查询($ q)(它是文档与文档相对于searchterm的文本相似度得分)时,Solr仅考虑搜索结果集以获取最小值和最大值进行缩放。

现在,我们想要的是第二个选项。所以,我们做这样的事情:

Q =搜索关键词& FL = ID,规模(子(SUM(ID,查询($ Q)),查询($ Q)),1,2)

这是我们正在做的与该领域:ID +查询($ q) - 查询($ q)

这诱使Solr认为这是一个查询相关字段,实际上它的计算结果为相同的'id'字段。这将为您提供平稳的[1,2]基于范围的缩放

除了规模(),我相信这种方式也将与其他功能工作查询MAX()分钟()其上设置的,而不仅仅是查询结果集整个文档操作。

+0

谢谢。我会尽快尝试。我希望这不是一个大的表现。 – bxfckrclooo

+0

它似乎适用于6.4.0,但不适用于4.8.1。无论如何,谢谢你的巧妙方法。我标明这个答案是正确的。 – bxfckrclooo

0

您可以使用Stats Component来获取您的设置的最小/最大值,然后在中间件中进行缩放。

下面的元素stats/stats_fields/fieldname应该有一个minmax键,它表示查询结果中值的末端。

+0

不幸的是,我不能那样做。我必须使用这些值来提升。 – bxfckrclooo