如何在vespa中自定义搜索结果?

时间:2019-01-24 06:13:54

标签: vespa

我的搜索结果如下:

{
"root": {
    "id": "toplevel",
    "relevance": 1,
    "fields": {
        "totalCount": 20
    },
    "coverage": {
        "coverage": 100,
        "documents": 20,
        "full": true,
        "nodes": 1,
        "results": 1,
        "resultsFull": 1
    },
    "children": [{
            "id": "group:string:Jones",
            "relevance": 9870,
            "value": "Jones",
            "fields": {
                "sum(price)": 39816
            }
        },
        {
            "id": "group:string:Brown",
            "relevance": 8000,
            "value": "Brown",
            "fields": {
                "sum(price)": 20537
            }
        }
    ]
}

}

我不想在搜索结果中显示字段和覆盖范围。我该如何实现?我也想根据错误和错误消息更改状态。我怎样才能做到这一点?请帮忙。

2 个答案:

答案 0 :(得分:3)

响应有效载荷:您可以创建自己的渲染器来控制返回的格式:https://docs.vespa.ai/documentation/result-rendering.html

HTTP状态代码:确定要返回的状态代码的规则是:

  • 如果结果中没有错误(Result.hits()。getError()== null):返回200 OK。

  • 如果结果包含错误并且没有常规命中:如果结果中任何ErrorMessage的错误代码(Result.hits()。getErrorHit()。errorIterator())是“ Web服务错误代码”,其中第一个返回。否则,如果它是“ HTTP兼容错误代码”,则返回其映射。否则,将返回500 INTERNAL_SERVER_ERROR。

  • 如果结果包含错误并且还包含有效命中:与上面相同,但是默认情况下返回200 OK而不是500。

Web服务错误代码:

200, 301, 302, 307, 400, 401, 403, 404, 405, 406, 408, 428, 429, 431, 500, 501, 502, 511

HTTP兼容错误代码:

com.yahoo.container.protect.Error.BAD_REQUEST -> Http code 400
com.yahoo.container.protect.Error.UNAUTHORIZED -> Http code 401
com.yahoo.container.protect.Error.FORBIDDEN -> Http code 403
com.yahoo.container.protect.Error.NOT_FOUND -> Http code 404
com.yahoo.container.protect.Error.INTERNAL_SERVER_ERROR -> Http code 500
com.yahoo.container.protect.Error.INSUFFICIENT_STORAGE -> Http code 507

使用此信息,您可以编写一个Searcher组件(https://docs.vespa.ai/documentation/searcher-development.html),该组件在Result中设置与您想要的HTTP状态相对应的ErrorMessage。

有关真实示例,请参见例如Vespa中捆绑的限速搜索器:https://github.com/vespa-engine/vespa/blob/master/container-search/src/main/java/com/yahoo/search/searchers/RateLimitingSearcher.java#L133

答案 1 :(得分:1)

要自定义结果,可以使用结果渲染器。请查看https://docs.vespa.ai/documentation/result-rendering.html,其中应附带示例。