From 16da2f84d046a05027e00a17883cfc71773496ae Mon Sep 17 00:00:00 2001 From: zzzxl1993 <474696115@qq.com> Date: Tue, 16 Jul 2024 20:43:40 +0800 Subject: [PATCH] [fix](inverted index) Corrected the issue of no_index_match failure caused by empty data. --- be/src/vec/functions/match.cpp | 7 ++++++- .../data/inverted_index_p0/test_no_index_match.out | 6 ++++++ .../suites/inverted_index_p0/test_no_index_match.groovy | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/be/src/vec/functions/match.cpp b/be/src/vec/functions/match.cpp index 1f5151d7e18b8f..fb70a684cb1b1b 100644 --- a/be/src/vec/functions/match.cpp +++ b/be/src/vec/functions/match.cpp @@ -365,7 +365,12 @@ Status FunctionMatchPhrasePrefix::execute_match( auto data_tokens = analyse_data_token(column_name, inverted_index_ctx, string_col, i, array_offsets, current_src_array_offset); - for (size_t j = 0; j < data_tokens.size() - query_tokens.size() + 1; j++) { + int32_t dis_count = data_tokens.size() - query_tokens.size(); + if (dis_count < 0) { + continue; + } + + for (size_t j = 0; j < dis_count + 1; j++) { if (data_tokens[j] == query_tokens[0] || query_tokens.size() == 1) { bool match = true; for (size_t k = 0; k < query_tokens.size(); k++) { diff --git a/regression-test/data/inverted_index_p0/test_no_index_match.out b/regression-test/data/inverted_index_p0/test_no_index_match.out index 21723064e349c0..932dd55fc5a42d 100644 --- a/regression-test/data/inverted_index_p0/test_no_index_match.out +++ b/regression-test/data/inverted_index_p0/test_no_index_match.out @@ -14,3 +14,9 @@ -- !sql -- 66 +-- !sql -- +0 + +-- !sql -- +0 + diff --git a/regression-test/suites/inverted_index_p0/test_no_index_match.groovy b/regression-test/suites/inverted_index_p0/test_no_index_match.groovy index afbdcf34df3bee..0676fd4fc9daa7 100644 --- a/regression-test/suites/inverted_index_p0/test_no_index_match.groovy +++ b/regression-test/suites/inverted_index_p0/test_no_index_match.groovy @@ -81,6 +81,8 @@ suite("test_no_index_match", "p0") { create_httplogs_unique_table.call(testTable_unique) load_httplogs_data.call(testTable_unique, 'httplogs_unique', 'true', 'json', 'documents-1000.json') + sql """ INSERT INTO ${testTable_unique} VALUES (1, '1', '', 1, 1); """ + sql 'sync' try { @@ -89,6 +91,9 @@ suite("test_no_index_match", "p0") { qt_sql """ select count() from ${testTable_unique} where (request match_phrase 'hm bg'); """ qt_sql """ select count() from ${testTable_unique} where (request match_phrase_prefix 'hm b'); """ qt_sql """ select count() from ${testTable_unique} where (request match_regexp 'la'); """ + + qt_sql """ select count() from ${testTable_unique} where (request match_phrase '欧冶工业品'); """ + qt_sql """ select count() from ${testTable_unique} where (request match_phrase_prefix '欧冶工业品'); """ } finally { } } finally {