首页 文章

Elasticsearch日期衰减函数,Rails

提问于
浏览
1

我正在进行一个简单的查询,包含多个字段,并尝试根据给定文档的天数来应用衰减函数 . 以下查询是我的尝试:

{
        query: {
            function_score:{
                query: {
                    multi_match: {
                        query: query,
                        fields: ['name', 'location']
                    },
                    functions: [{
                        gauss: {
                            created_at: {
                                origin: 'now',
                                scale: '1d',
                                offset: '2d',
                                decay: 0.5
                            }
                        }
                    }]
                }
            }
        }
    }

使用以下映射:

mappings dynamic: 'false' do
    indexes :name, analyzer: 'english'
    indexes :location, analyzer: 'english'
    indexes :created_at, type: 'date'
end

给出以下错误:

[400] {“error”:{“root_cause”:[{“type”:“query_parsing_exception”,“reason”:“没有为[gauss]注册查询”,“index”:“people”,“line”: 1,“col”:143}],“type”:“search_phase_execution_exception”,“reason”:“所有分片失败”,“阶段”:“query_fetch”,“分组”:true,“failed_shards”:[{“shard “:0,”index“:”jobs“,”node“:”abcdefgZq1PMsd882foA“,”reason“:{”type“:”query_parsing_exception“,”reason“:”没有为[gauss]注册查询“,”index“ : “人”, “线”:1, “关口”:143}}]}, “状态”:400}

1 回答

  • 1

    functions 需要更高一级,就在 function_score 内部而不是 query 内部,如下所示:

    {
        query: {
            function_score:{
                functions: [{
                    gauss: {
                        created_at: {
                            origin: 'now',
                            scale: '1d',
                            offset: '2d',
                            decay: 0.5
                        }
                    }
                }],
                query: {
                    multi_match: {
                        query: query,
                        fields: ['name', 'location']
                    }
                }
            }
        }
    }
    

相关问题