This is an automated email from the ASF dual-hosted git repository.
twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new 309ea7b1 feat(search): improve the response format of
FT.SEARCH|SEARCHSQL (#2351)
309ea7b1 is described below
commit 309ea7b1726a3a6bb874d770f4e6950dcef08358
Author: Twice <[email protected]>
AuthorDate: Sun Jun 2 19:52:49 2024 +0900
feat(search): improve the response format of FT.SEARCH|SEARCHSQL (#2351)
---
src/commands/cmd_search.cc | 34 ++++++++++++++++------------------
src/search/index_manager.h | 2 +-
2 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/commands/cmd_search.cc b/src/commands/cmd_search.cc
index 0ca8f5dd..bf6444dc 100644
--- a/src/commands/cmd_search.cc
+++ b/src/commands/cmd_search.cc
@@ -25,6 +25,7 @@
#include "commands/command_parser.h"
#include "search/index_info.h"
#include "search/ir.h"
+#include "search/plan_executor.h"
#include "search/redis_query_transformer.h"
#include "search/search_encoding.h"
#include "search/sql_transformer.h"
@@ -138,6 +139,19 @@ class CommandFTCreate : public Commander {
std::unique_ptr<kqir::IndexInfo> index_info_;
};
+static void DumpQueryResult(const std::vector<kqir::ExecutorContext::RowType>
&rows, std::string *output) {
+ output->append(MultiLen(rows.size() * 2 + 1));
+ output->append(Integer(rows.size()));
+ for (const auto &[key, fields, _] : rows) {
+ output->append(redis::BulkString(key));
+ output->append(MultiLen(fields.size() * 2));
+ for (const auto &[info, field] : fields) {
+ output->append(redis::BulkString(info->name));
+ output->append(redis::BulkString(field));
+ }
+ }
+}
+
class CommandFTSearchSQL : public Commander {
Status Execute(Server *srv, Connection *conn, std::string *output) override {
const auto &sql = args_[1];
@@ -146,15 +160,7 @@ class CommandFTSearchSQL : public Commander {
auto results = GET_OR_RET(srv->index_mgr.Search(std::move(ir),
conn->GetNamespace()));
- output->append(MultiLen(results.size()));
- for (const auto &[key, fields, _] : results) {
- output->append(MultiLen(2));
- output->append(redis::BulkString(key));
- output->append(MultiLen(fields.size()));
- for (const auto &[_, field] : fields) {
- output->append(redis::BulkString(field));
- }
- }
+ DumpQueryResult(results, output);
return Status::OK();
};
@@ -211,15 +217,7 @@ class CommandFTSearch : public Commander {
CHECK(ir_);
auto results = GET_OR_RET(srv->index_mgr.Search(std::move(ir_),
conn->GetNamespace()));
- output->append(MultiLen(results.size()));
- for (const auto &[key, fields, _] : results) {
- output->append(MultiLen(2));
- output->append(redis::BulkString(key));
- output->append(MultiLen(fields.size()));
- for (const auto &[_, field] : fields) {
- output->append(redis::BulkString(field));
- }
- }
+ DumpQueryResult(results, output);
return Status::OK();
};
diff --git a/src/search/index_manager.h b/src/search/index_manager.h
index 222c1440..a4174dbd 100644
--- a/src/search/index_manager.h
+++ b/src/search/index_manager.h
@@ -188,7 +188,7 @@ struct IndexManager {
auto plan_ir = kqir::PassManager::Execute(kqir::PassManager::Default(),
std::move(ir));
std::unique_ptr<kqir::PlanOperator> plan_op;
if (plan_op = kqir::Node::As<kqir::PlanOperator>(std::move(plan_ir));
!plan_op) {
- return {Status::NotOK, "failed to convert the SQL query to plan
operators"};
+ return {Status::NotOK, "failed to convert the query to plan operators"};
}
kqir::ExecutorContext executor_ctx(plan_op.get(), storage);