Skip to content

Commit

Permalink
[fix](inverted index) multi_match supports any, all, phrase.
Browse files Browse the repository at this point in the history
  • Loading branch information
zzzxl1993 committed Oct 10, 2024
1 parent d1dd2d1 commit ae91cfe
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 3 deletions.
12 changes: 9 additions & 3 deletions be/src/vec/functions/function_multi_match.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,17 @@ Status FunctionMultiMatch::execute_impl(FunctionContext* /*context*/, Block& blo
}

InvertedIndexQueryType get_query_type(const std::string& query_type) {
if (query_type == "phrase_prefix") {
if (query_type == "any") {
return InvertedIndexQueryType::MATCH_ANY_QUERY;
} else if (query_type == "all") {
return InvertedIndexQueryType::MATCH_ALL_QUERY;
} else if (query_type == "phrase") {
return InvertedIndexQueryType::MATCH_PHRASE_QUERY;
} else if (query_type == "phrase_prefix") {
return InvertedIndexQueryType::MATCH_PHRASE_PREFIX_QUERY;
} else {
return InvertedIndexQueryType::UNKNOWN_QUERY;
}
return InvertedIndexQueryType::UNKNOWN_QUERY;
}

Status FunctionMultiMatch::evaluate_inverted_index(
Expand All @@ -62,7 +69,6 @@ Status FunctionMultiMatch::evaluate_inverted_index(
"parameter query type incorrect for function multi_match: query_type = {}",
query_type);
}

// query
auto query_str = arguments[1].column->get_data_at(0);
auto param_type = arguments[1].type->get_type_as_type_descriptor().type;
Expand Down
144 changes: 144 additions & 0 deletions regression-test/data/inverted_index_p0/test_index_multi_match.out
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,147 @@
-- !sql --
44

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
30

-- !sql --
5

-- !sql --
5

-- !sql --
5

-- !sql --
5

Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,63 @@ suite("test_index_multi_match", "p0"){
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'phrase_prefix', '2'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'phrase_prefix', 'a'); """

// match_any
qt_sql """ select count() from ${indexTbName1} where (clientip match_any '2' or request match_any '2' or status match_any '2' or size match_any '2'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_any '2' or request match_any '2' or status match_any '2' or size match_any '2'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_any '2' or request match_any '2' or status match_any '2' or size match_any '2'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_any '2' or request match_any '2' or status match_any '2' or size match_any '2'); """
qt_sql """ select count() from ${indexTbName1} where (clientip match_any 'a' or request match_any 'a' or status match_any 'a' or size match_any 'a'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_any 'a' or request match_any 'a' or status match_any 'a' or size match_any 'a'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_any 'a' or request match_any 'a' or status match_any 'a' or size match_any 'a'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_any 'a' or request match_any 'a' or status match_any 'a' or size match_any 'a'); """

qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'any', '2'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'any', '2'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'any', '2'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'any', '2'); """
qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'any', 'a'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'any', 'a'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'any', 'a'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'any', 'a'); """

// match_all
qt_sql """ select count() from ${indexTbName1} where (clientip match_all '2' or request match_all '2' or status match_all '2' or size match_all '2'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_all '2' or request match_all '2' or status match_all '2' or size match_all '2'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_all '2' or request match_all '2' or status match_all '2' or size match_all '2'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_all '2' or request match_all '2' or status match_all '2' or size match_all '2'); """
qt_sql """ select count() from ${indexTbName1} where (clientip match_all 'a' or request match_all 'a' or status match_all 'a' or size match_all 'a'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_all 'a' or request match_all 'a' or status match_all 'a' or size match_all 'a'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_all 'a' or request match_all 'a' or status match_all 'a' or size match_all 'a'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_all 'a' or request match_all 'a' or status match_all 'a' or size match_all 'a'); """

qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'all', '2'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'all', '2'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'all', '2'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'all', '2'); """
qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'all', 'a'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'all', 'a'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'all', 'a'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'all', 'a'); """

// match_phrase
qt_sql """ select count() from ${indexTbName1} where (clientip match_phrase '2' or request match_phrase '2' or status match_phrase '2' or size match_phrase '2'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_phrase '2' or request match_phrase '2' or status match_phrase '2' or size match_phrase '2'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_phrase '2' or request match_phrase '2' or status match_phrase '2' or size match_phrase '2'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_phrase '2' or request match_phrase '2' or status match_phrase '2' or size match_phrase '2'); """
qt_sql """ select count() from ${indexTbName1} where (clientip match_phrase 'a' or request match_phrase 'a' or status match_phrase 'a' or size match_phrase 'a'); """
qt_sql """ select count() from ${indexTbName2} where (clientip match_phrase 'a' or request match_phrase 'a' or status match_phrase 'a' or size match_phrase 'a'); """
qt_sql """ select count() from ${indexTbName3} where (clientip match_phrase 'a' or request match_phrase 'a' or status match_phrase 'a' or size match_phrase 'a'); """
qt_sql """ select count() from ${indexTbName4} where (clientip match_phrase 'a' or request match_phrase 'a' or status match_phrase 'a' or size match_phrase 'a'); """

qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'phrase', '2'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'phrase', '2'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'phrase', '2'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'phrase', '2'); """
qt_sql """ select count() from ${indexTbName1} where multi_match(clientip, request, status, size, 'phrase', 'a'); """
qt_sql """ select count() from ${indexTbName2} where multi_match(clientip, request, status, size, 'phrase', 'a'); """
qt_sql """ select count() from ${indexTbName3} where multi_match(clientip, request, status, size, 'phrase', 'a'); """
qt_sql """ select count() from ${indexTbName4} where multi_match(clientip, request, status, size, 'phrase', 'a'); """

} finally {
//try_sql("DROP TABLE IF EXISTS ${testTable}")
}
Expand Down

0 comments on commit ae91cfe

Please sign in to comment.