【发布时间】:2017-02-19 05:28:33
【问题描述】:
我有一个关于根据创建日期修改乐谱文档的问题。我试过高斯函数和field_value_factor。
第一个是(所有查询子句):
@search_definition[:query] = {
function_score:{
query: {
bool: {
must: [
{
query_string: {
query: <query_term>,
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"
}
}
}
}
通过这个配置,我告诉 elastic,最后一个文档必须有更高的分数。当我用它执行查询时,结果完全相反!首先返回最旧的文件。即使我将原点更改为
origin: "2010-05-01 00:00:00"
这是第一个文档的日期,最旧的也被首先检索。我做错了什么?
有了field_value_factor,事情变得更好了,但还不是我等待的......(所有的查询子句都是)
@search_definition[:query] = {
function_score:{
query: {
bool: {
must: [
{
query_string: {
query: <query_term>,
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 比 2015 早??
非常感谢,
吉尔赫姆
【问题讨论】:
-
你能把你的整个查询告诉我们吗?
-
@ChintanShah25 ,我已经编辑了我的问题,包括整个查询。提前致谢
标签: elasticsearch