mirror of
https://github.com/typesense/typesense.git
synced 2025-05-20 05:32:30 +08:00
Fix preset usage regression on multi search endpoint.
This commit is contained in:
parent
80879ff582
commit
c5d2efa36d
@ -766,7 +766,9 @@ Option<bool> CollectionManager::do_search(std::map<std::string, std::string>& re
|
||||
nlohmann::json preset;
|
||||
const auto& preset_op = CollectionManager::get_instance().get_preset(preset_it->second, preset);
|
||||
|
||||
if(preset_op.ok()) {
|
||||
// NOTE: we merge only single preset configuration because multi ("searches") preset value replaces
|
||||
// the request body directly before we reach this single search request function.
|
||||
if(preset_op.ok() && !preset.contains("searches")) {
|
||||
if(!preset.is_object()) {
|
||||
return Option<bool>(400, "Search preset is not an object.");
|
||||
}
|
||||
|
@ -610,7 +610,7 @@ TEST_F(CoreAPIUtilsTest, MultiSearchWithPresetShouldUsePresetForAuth) {
|
||||
ASSERT_EQ(2, embedded_params_vec.size());
|
||||
}
|
||||
|
||||
TEST_F(CoreAPIUtilsTest, PresetSingleSearch) {
|
||||
TEST_F(CoreAPIUtilsTest, PresetMultiSearch) {
|
||||
nlohmann::json schema = R"({
|
||||
"name": "coll1",
|
||||
"fields": [
|
||||
@ -634,7 +634,7 @@ TEST_F(CoreAPIUtilsTest, PresetSingleSearch) {
|
||||
|
||||
auto search_body = R"(
|
||||
{"searches":[
|
||||
{"collection":"coll1","q":"apple", "query_by": "title", "preset": "single_preset"}
|
||||
{"collection":"coll1","q":"apple", "query_by": "name", "preset": "single_preset"}
|
||||
]}
|
||||
)";
|
||||
|
||||
@ -644,8 +644,40 @@ TEST_F(CoreAPIUtilsTest, PresetSingleSearch) {
|
||||
|
||||
post_multi_search(req, res);
|
||||
|
||||
ASSERT_EQ("12", req->params["per_page"]);
|
||||
ASSERT_EQ("coll1", req->params["collection"]);
|
||||
auto res_json = nlohmann::json::parse(res->body);
|
||||
ASSERT_EQ(1, res_json["results"].size());
|
||||
ASSERT_EQ(0, res_json["results"][0]["found"].get<size_t>());
|
||||
|
||||
// with multiple "searches" preset configuration
|
||||
preset_value = R"(
|
||||
{"searches":[
|
||||
{"collection":"coll1", "q": "*", "per_page": "8"},
|
||||
{"collection":"coll1", "q": "*", "per_page": "11"}
|
||||
]}
|
||||
)"_json;
|
||||
|
||||
collectionManager.upsert_preset("multi_preset", preset_value);
|
||||
embedded_params.clear();
|
||||
req->params.clear();
|
||||
req->params["preset"] = "multi_preset";
|
||||
req->embedded_params_vec.clear();
|
||||
req->embedded_params_vec.push_back(embedded_params);
|
||||
req->embedded_params_vec.push_back(embedded_params);
|
||||
|
||||
// "preset": "multi_preset"
|
||||
search_body = R"(
|
||||
{"searches":[
|
||||
{"collection":"coll1","q":"apple", "query_by": "title"}
|
||||
]}
|
||||
)";
|
||||
|
||||
req->body = search_body;
|
||||
|
||||
post_multi_search(req, res);
|
||||
res_json = nlohmann::json::parse(res->body);
|
||||
ASSERT_EQ(2, res_json["results"].size());
|
||||
ASSERT_EQ(0, res_json["results"][0]["found"].get<size_t>());
|
||||
ASSERT_EQ(0, res_json["results"][1]["found"].get<size_t>());
|
||||
|
||||
collectionManager.drop_collection("coll1");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user