我有一个关于根据创建日期修改得分文档的问题.我尝试过高斯函数和field_value_factor.
第一个是(所有查询条款):
@search_definition[:query] = {
function_score:{
query: {
bool: {
must: [
{
query_string: {
query: ,
fields: %w( field_1ˆ2
field_2ˆ3
...
field_n^2),
analyze_wildcard: true,
auto_generate_phrase_queries: false,
analyzer: 'brazilian',
default_operator: 'AND'
}
}
],
filter: {
bool: {
should: [
{ term: {"boolean_field": false}},
{ terms: {"array_field_1": options[:key].ids}},
{ term: {"array_field_2.id": options[:key].id}}
]
}
}
}
},
gauss:{
date_field: {
scale: "1d",
decay: "0.5"
}
}
}
}
通过这种配置,我告诉我们最后的文件必须具有更高的分数.当我用它执行查询时,结果完全相反!最早的文件首先被退回.即使我改变原点
origin: "2010-05-01 00:00:00"
这是第一个文件的日期,最早的文件也是首先被检索的.我究竟做错了什么?
使用field_value_factor,事情会更好,但还不是我在等什么……(所有的查询子句都是)
@search_definition[:query] = {
function_score:{
query: {
bool: {
must: [
{
query_string: {
query: ,
fields: %w( field_1ˆ2
field_2ˆ3
...
field_n^2),
analyze_wildcard: true,
auto_generate_phrase_queries: false,
analyzer: 'brazilian',
default_operator: 'AND'
}
}
],
filter: {
bool: {
should: [
{ term: {"boolean_field": false}},
{ terms: {"array_field_1": options[:key].ids}},
{ term: {"array_field_2.id": options[:key].id}}
]
}
}
}
},
field_value_factor: {
field: "date_field",
factor : 100,
modifier: "sqrt"
}
}
}
使用这个其他配置,2016年和2015年的文档将首先返回,但是从2016年开始,有大量文档的得分低于2015年的其他文档,即使我设置了一个修饰符“sqrt”,因子:100!
我认为guass功能将是合适的解决方案.如何反转这个高斯结果?或者我如何增加field_value_factor以便2016年到来之前?
非常感谢,
吉列尔梅