4

我有一个搜索结果,如下所示:

{
"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
            }
        }
    ]
}

}

我不希望搜索结果中出现字段和覆盖范围。我怎样才能做到这一点?而且我想根据错误消息更改状态。我怎样才能做到这一点?请帮忙。

4

2 回答 2

3

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

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

  • 如果 Result 不包含错误(Result.hits().getError()==null):返回 200 OK。

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

  • 如果 Result 包含错误并且还包含有效命中:同上,但默认返回 200 OK 而不是 500。

网络服务错误代码:

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 中设置一个 ErrorMessage 对应于您想要的 HTTP 状态。

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

于 2019-01-24T10:28:06.010 回答
1

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

于 2019-01-24T07:59:37.893 回答