- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于根据其创建日期修改乐谱文档的问题。我试过高斯函数和 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 年之前出现??
非常感谢,
吉列尔梅
最佳答案
您可能想尝试将高斯函数放在内部 functions param并像下面的查询一样给它一个权重。我还认为规模太低,可能会使很多文档零分。我还将衰减增加到 0.8,并赋予最近的文档更高的权重。您也可以使用 explain api看看评分是如何完成的。
{
"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
}
}]
}
}
}
},
"functions": [{
"gauss": {
"date_field": {
"origin": "now"
"scale": "30d",
"decay": "0.8"
}
},
"weight": 20
}]
}
}
此外,来源应该是最新日期,而不是origin: "2010-05-01 00:00:00"
,试试
origin: "2016-05-01 00:00:00"
这有帮助吗?
关于Elasticsearch:按日期字段排序(降序):gauss 或 field_value_factor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964256/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!