默认情况下,Searchkit 提供了一个 Elasticsearch 查询,该查询旨在适用于大多数用例。但是,您可能希望自定义查询以提高搜索结果的相关性。
此示例显示了如何使用 getQuery
函数为给定请求自定义查询。
以下是如何使用 combined_fields
查询 (在新标签页中打开) 的示例。
const results = await apiClient.handleRequest(req.body, {
getQuery: (query, search_attributes) => {
return [
{
combined_fields: {
query,
fields: search_attributes,
},
},
];
},
});
您还可以使用钩子自定义查询。例如,向默认查询添加重新评分查询。
在 api 文档中阅读有关 钩子 的更多信息。
请求钩子
请求钩子是在发送搜索请求到 Elasticsearch 之前和之后调用的函数。它们可用于在发送到 Elasticsearch 和 UI 之前修改搜索请求和响应。
请求钩子允许您向搜索请求和响应添加自定义逻辑。例如,您可以向默认查询添加重新评分查询,或向请求添加自定义查询。
重新评分查询示例
也可用于开源连接 学习排序插件 (在新标签页中打开)
const results = await client.handleRequest(req.body, {
hooks: {
beforeSearch: (searchRequests) => {
const uiRequest = searchRequests[0]
return [
{
...uiRequest,
body: {
...uiRequest.body,
rescore: {
window_size: 100,
query: {
rescore_query: {
match: {
plot: {
query: uiRequest.body.query,
operator: "and",
},
},
},
query_weight: 1,
rescore_query_weight: 10,
}
}
}
},
searchRequests.slice(1, searchRequests.length)
]
},
}
});
执行 KNN 搜索的示例
扩展查询以使用 KNN 搜索和文本搜索进行混合搜索的示例。检索 UI 中提供的搜索查询,并使用它从自定义图像搜索 API 中检索图像嵌入。然后扩展查询以使用 KNN 搜索(使用嵌入)和文本搜索进行混合搜索。
const results = await client.handleRequest(req.body, {
getKnnQuery(query, search_attributes, config) {
return {
field: 'dense-vector-field',
k: 10,
num_candidates: 100,
// supported in latest version of Elasticsearch
query_vector_builder: {
text_embedding: {
model_id: 'cookie_model',
model_text: query
}
}
}
}
});