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 83650874 feat(search): add field options and definition part to
FT.INFO (#2571)
83650874 is described below
commit 83650874f7953f402c65ee620d6d47870fc03023
Author: Twice <[email protected]>
AuthorDate: Fri Oct 4 08:31:19 2024 +0800
feat(search): add field options and definition part to FT.INFO (#2571)
---
src/commands/cmd_search.cc | 21 +++++++++++++++++----
tests/gocase/unit/search/search_test.go | 14 ++++++--------
2 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/src/commands/cmd_search.cc b/src/commands/cmd_search.cc
index 88858558..11423678 100644
--- a/src/commands/cmd_search.cc
+++ b/src/commands/cmd_search.cc
@@ -427,24 +427,37 @@ class CommandFTInfo : public Commander {
}
const auto &info = iter->second;
- output->append(MultiLen(8));
+ output->append(MultiLen(6));
output->append(redis::SimpleString("index_name"));
output->append(redis::BulkString(info->name));
- output->append(redis::SimpleString("on_data_type"));
+ output->append(redis::SimpleString("index_definition"));
+ output->append(redis::MultiLen(4));
+ output->append(redis::SimpleString("key_type"));
output->append(redis::BulkString(RedisTypeNames[(size_t)info->metadata.on_data_type]));
-
output->append(redis::SimpleString("prefixes"));
output->append(redis::ArrayOfBulkStrings(info->prefixes.prefixes));
output->append(redis::SimpleString("fields"));
output->append(MultiLen(info->fields.size()));
for (const auto &[_, field] : info->fields) {
- output->append(MultiLen(2));
+ output->append(MultiLen(6));
+ output->append(redis::SimpleString("identifier"));
output->append(redis::BulkString(field.name));
+ output->append(redis::SimpleString("type"));
auto type = field.metadata->Type();
output->append(redis::BulkString(std::string(type.begin(), type.end())));
+ output->append(redis::SimpleString("options"));
+ if (auto tag = field.MetadataAs<TagFieldMetadata>()) {
+ output->append(redis::MultiLen(4));
+ output->append(redis::SimpleString("separator"));
+ output->append(redis::BulkString(std::string(1, tag->separator)));
+ output->append(redis::SimpleString("case_sensitive"));
+ output->append(conn->Bool(tag->case_sensitive));
+ } else {
+ output->append(redis::MultiLen(0));
+ }
}
return Status::OK();
diff --git a/tests/gocase/unit/search/search_test.go
b/tests/gocase/unit/search/search_test.go
index 01445994..dc4d1c09 100644
--- a/tests/gocase/unit/search/search_test.go
+++ b/tests/gocase/unit/search/search_test.go
@@ -61,14 +61,12 @@ func TestSearch(t *testing.T) {
idxInfo := infoRes.Val().([]interface{})
require.Equal(t, "index_name", idxInfo[0])
require.Equal(t, "testidx1", idxInfo[1])
- require.Equal(t, "on_data_type", idxInfo[2])
- require.Equal(t, "ReJSON-RL", idxInfo[3])
- require.Equal(t, "prefixes", idxInfo[4])
- require.Equal(t, []interface{}{"test1:"}, idxInfo[5])
- require.Equal(t, "fields", idxInfo[6])
- require.Equal(t, []interface{}{"a", "tag"},
idxInfo[7].([]interface{})[0])
- require.Equal(t, []interface{}{"b", "numeric"},
idxInfo[7].([]interface{})[1])
- require.Equal(t, []interface{}{"c", "vector"},
idxInfo[7].([]interface{})[2])
+ require.Equal(t, "index_definition", idxInfo[2])
+ require.Equal(t, []interface{}{"key_type", "ReJSON-RL",
"prefixes", []interface{}{"test1:"}}, idxInfo[3])
+ require.Equal(t, "fields", idxInfo[4])
+ require.Equal(t, []interface{}{"identifier", "a",
"type", "tag", "options", []interface{}{"separator", ",", "case_sensitive",
int64(0)}}, idxInfo[5].([]interface{})[0])
+ require.Equal(t, []interface{}{"identifier", "b",
"type", "numeric", "options", []interface{}{}}, idxInfo[5].([]interface{})[1])
+ require.Equal(t, []interface{}{"identifier", "c",
"type", "vector", "options", []interface{}{}}, idxInfo[5].([]interface{})[2])
}
verify(t)