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)
 

Reply via email to