diff --git a/ci/test.sh b/ci/test.sh
index 5a20de51b4f59c6c82ab97fc8bdabc5a0334e1b8..cb692f30d73cd09c7f3694ddbe1f6e24a1779c4a 100755
--- a/ci/test.sh
+++ b/ci/test.sh
@@ -102,7 +102,8 @@ function run_test() {
         $PROJ_DIR/tests/query/stateless/test_range.py \
         $PROJ_DIR/tests/query/stateless/test_go.py \
         $PROJ_DIR/tests/query/stateless/test_simple_query.py \
-        $PROJ_DIR/tests/query/stateless/test_keyword.py
+        $PROJ_DIR/tests/query/stateless/test_keyword.py \
+        $PROJ_DIR/tests/query/stateless/test_lookup.py
 }
 
 case "$1" in
diff --git a/src/validator/IndexScanValidator.cpp b/src/validator/IndexScanValidator.cpp
index 4f6848f798b792239e0d7a64fc219d19deb22124..def908ccc1a3a8f00c06353060ac56996f8a4b36 100644
--- a/src/validator/IndexScanValidator.cpp
+++ b/src/validator/IndexScanValidator.cpp
@@ -42,6 +42,7 @@ Status IndexScanValidator::prepareFrom() {
 
 Status IndexScanValidator::prepareYield() {
     auto *sentence = static_cast<const LookupSentence *>(sentence_);
+    returnCols_ = std::make_unique<std::vector<std::string>>();
     if (sentence->yieldClause() == nullptr) {
         return Status::OK();
     }
@@ -55,7 +56,6 @@ Status IndexScanValidator::prepareYield() {
                ? Status::EdgeNotFound("Edge schema not found : %s", from->c_str())
                : Status::TagNotFound("Tag schema not found : %s", from->c_str());
     }
-    returnCols_ = std::make_unique<std::vector<std::string>>();
     for (auto col : columns) {
         std::string schemaName, colName;
         if (col->expr()->kind() == Expression::Kind::kLabelAttribute) {
diff --git a/tests/query/stateless/test_lookup.py b/tests/query/stateless/test_lookup.py
index f1a112a18b1f6b6e27f90a69eab08ee031e3e3e5..9bd529d8bf7482e02b2312baea7541c12b81fcb5 100644
--- a/tests/query/stateless/test_lookup.py
+++ b/tests/query/stateless/test_lookup.py
@@ -18,12 +18,14 @@ class TestIndex(NebulaTestSuite):
         self.check_resp_succeeded(resp)
 
     def test_edge_index(self):
+        time.sleep(self.delay)
         resp = self.execute('USE nbaLookup')
         self.check_resp_succeeded(resp)
         resp = self.execute("CREATE EDGE like(likeness int)")
         self.check_resp_succeeded(resp)
         resp = self.execute("CREATE EDGE serve(start_year int, end_year int)")
         self.check_resp_succeeded(resp)
+        time.sleep(self.delay)
         resp = self.execute("CREATE EDGE INDEX serve_index_1 on serve(start_year)")
         self.check_resp_succeeded(resp)
         resp = self.execute("CREATE EDGE INDEX serve_index_2 on serve(end_year)")
@@ -33,97 +35,125 @@ class TestIndex(NebulaTestSuite):
         resp = self.execute("CREATE EDGE INDEX like_index_1 on like(likeness)")
         self.check_resp_succeeded(resp)
         time.sleep(self.delay)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 100 -> 101:(95)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "100" -> "101":(95)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 101 -> 102:(95)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "101" -> "102":(95)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 102 -> 104:(85)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "102" -> "104":(85)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 102 -> 103:(85)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "102" -> "103":(85)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 105 -> 106:(90)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "105" -> "106":(90)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE like(likeness) VALUES 106 -> 100:(75)')
+        resp = self.execute('INSERT EDGE like(likeness) VALUES "106" -> "100":(75)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 100 -> 200:(1997, 2016)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "100" -> "200":(1997, 2016)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 101 -> 201:(1999, 2018)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "101" -> "201":(1999, 2018)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 102 -> 202:(1997, 2016)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "102" -> "202":(1997, 2016)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 103 -> 203:(1999, 2018)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "103" -> "203":(1999, 2018)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 105 -> 204:(1997, 2016)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "105" -> "204":(1997, 2016)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES 121 -> 201:(1999, 2018)')
+        resp = self.execute('INSERT EDGE serve(start_year, end_year) VALUES "121" -> "201":(1999, 2018)')
         self.check_resp_succeeded(resp)
+
         resp = self.execute_query('LOOKUP ON serve where serve.start_year > 0')
         self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 6
+
+        resp = self.execute_query('LOOKUP ON serve where serve.start_year > 1997 and serve.end_year < 2020')
+        self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 3
+
         resp = self.execute_query('LOOKUP ON serve where serve.start_year > 2000 and serve.end_year < 2020')
         self.check_resp_succeeded(resp)
+        self.check_empty_result(resp)
+
         resp = self.execute_query('LOOKUP ON like where like.likeness > 89')
         self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 3
+
         resp = self.execute_query('LOOKUP ON like where like.likeness < 39')
         self.check_resp_succeeded(resp)
+        self.check_empty_result(resp)
 
     def test_tag_index(self):
+        time.sleep(self.delay)
         resp = self.execute('USE nbaLookup')
         self.check_resp_succeeded(resp)
-        resp = self.execute("CREATE TAG player (name string, age int)")
+        resp = self.execute("CREATE TAG player (name FIXED_STRING(30), age INT)")
         self.check_resp_succeeded(resp)
-        resp = self.execute("CREATE TAG team (name string)")
+        resp = self.execute("CREATE TAG team (name FIXED_STRING(30))")
         self.check_resp_succeeded(resp)
-        resp = self.execute("CREATE TAG INDEX player_index_1 on player(name);")
+        time.sleep(self.delay)
+        resp = self.execute("CREATE TAG INDEX player_index_1 on player(name)")
         self.check_resp_succeeded(resp)
-        resp = self.execute("CREATE TAG INDEX player_index_2 on player(age);")
+        resp = self.execute("CREATE TAG INDEX player_index_2 on player(age)")
         self.check_resp_succeeded(resp)
-        resp = self.execute("CREATE TAG INDEX player_index_3 on player(name,age);")
+        resp = self.execute("CREATE TAG INDEX player_index_3 on player(name,age)")
         self.check_resp_succeeded(resp)
         resp = self.execute("CREATE TAG INDEX team_index_1 on team(name)")
         self.check_resp_succeeded(resp)
         time.sleep(self.delay)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 100:("Tim Duncan", 42)')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "100":("Tim Duncan", 42)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 101:("Tony Parker", 36);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "101":("Tony Parker", 36)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 102:("LaMarcus Aldridge", 33);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "102":("LaMarcus Aldridge", 33)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 103:("xxx", 35);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "103":("xxx", 35)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 104:("yyy", 28);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "104":("yyy", 28)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 105:("zzz", 21);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "105":("zzz", 21)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 106:("kkk", 21);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "106":("kkk", 21)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 121:("Useless", 60);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "121":("Useless", 60)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX player(name, age) VALUES 121:("Useless", 20);')
+        resp = self.execute('INSERT VERTEX player(name, age) VALUES "121":("Useless", 20)')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX team(name) VALUES 200:("Warriors");')
+        resp = self.execute('INSERT VERTEX team(name) VALUES "200":("Warriors")')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX team(name) VALUES 201:("Nuggets")')
+        resp = self.execute('INSERT VERTEX team(name) VALUES "201":("Nuggets")')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX team(name) VALUES 202:("oopp")')
+        resp = self.execute('INSERT VERTEX team(name) VALUES "202":("oopp")')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX team(name) VALUES 203:("iiiooo")')
+        resp = self.execute('INSERT VERTEX team(name) VALUES "203":("iiiooo")')
         self.check_resp_succeeded(resp)
-        resp = self.execute('INSERT VERTEX team(name) VALUES 204:("opl")')
+        resp = self.execute('INSERT VERTEX team(name) VALUES "204":("opl")')
         self.check_resp_succeeded(resp)
+
         resp = self.execute_query('LOOKUP ON player where player.age == 35')
         self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 1
+
         resp = self.execute_query('LOOKUP ON player where player.age > 0')
         self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 8
+
         resp = self.execute_query('LOOKUP ON player where player.age < 100')
         self.check_resp_succeeded(resp)
-        resp = self.execute_query('LOOKUP ON player where player.name == Useless')
+        assert len(resp.data.rows) == 8
+
+        resp = self.execute_query('LOOKUP ON player where player.name == "Useless"')
         self.check_resp_succeeded(resp)
-        resp = self.execute_query('LOOKUP ON player where player.name == Useless and player.age < 30')
+        assert len(resp.data.rows) == 1
+
+        resp = self.execute_query('LOOKUP ON player where player.name == "Useless" and player.age < 30')
         self.check_resp_succeeded(resp)
-        resp = self.execute_query('LOOKUP ON team where team.name == Warriors')
+        assert len(resp.data.rows) == 1
+
+        resp = self.execute_query('LOOKUP ON team where team.name == "Warriors"')
         self.check_resp_succeeded(resp)
-        resp = self.execute_query('LOOKUP ON team where team.name == oopp')
+        assert len(resp.data.rows) == 1
+
+        resp = self.execute_query('LOOKUP ON team where team.name == "oopp"')
         self.check_resp_succeeded(resp)
+        assert len(resp.data.rows) == 1
 
     @classmethod
     def cleanup(self):