Skip to content

Commit 1ca26e1

Browse files
authored
Add example select queries from fulltext index (#27754)
1 parent de312e5 commit 1ca26e1

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

ydb/core/kqp/ut/indexes/kqp_indexes_fulltext_ut.cpp

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,6 +1693,142 @@ Y_UNIT_TEST(UpdateRowCoveredReturning) {
16931693
])", NYdb::FormatResultSetYson(index));
16941694
}
16951695

1696+
Y_UNIT_TEST(Select) {
1697+
auto kikimr = Kikimr();
1698+
auto db = kikimr.GetQueryClient();
1699+
1700+
CreateTexts(db);
1701+
UpsertTexts(db);
1702+
AddIndex(db);
1703+
auto index = ReadIndex(db);
1704+
CompareYson(R"([
1705+
[[100u];"animals"];
1706+
[[100u];"cats"];
1707+
[[200u];"cats"];
1708+
[[300u];"cats"];
1709+
[[100u];"chase"];
1710+
[[200u];"chase"];
1711+
[[200u];"dogs"];
1712+
[[400u];"dogs"];
1713+
[[400u];"foxes"];
1714+
[[300u];"love"];
1715+
[[400u];"love"];
1716+
[[100u];"small"];
1717+
[[200u];"small"]
1718+
])", NYdb::FormatResultSetYson(index));
1719+
1720+
{ // Select by one token
1721+
TString query = R"sql(
1722+
SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1723+
WHERE __ydb_token = "dogs"
1724+
ORDER BY Key
1725+
)sql";
1726+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1727+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1728+
CompareYson(R"([
1729+
[[200u]];
1730+
[[400u]]
1731+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1732+
}
1733+
1734+
{ // Select by two tokens using OR
1735+
TString query = R"sql(
1736+
SELECT DISTINCT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1737+
WHERE __ydb_token IN ("foxes", "animals")
1738+
ORDER BY Key
1739+
)sql";
1740+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1741+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1742+
CompareYson(R"([
1743+
[[100u]];
1744+
[[400u]]
1745+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1746+
}
1747+
1748+
{ // Select by two tokens using AND
1749+
TString query = R"sql(
1750+
SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1751+
WHERE __ydb_token = "dogs"
1752+
INTERSECT
1753+
SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1754+
WHERE __ydb_token = "chase"
1755+
)sql";
1756+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1757+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1758+
CompareYson(R"([
1759+
[[200u]]
1760+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1761+
}
1762+
}
1763+
1764+
Y_UNIT_TEST(SelectCovered) {
1765+
auto kikimr = Kikimr();
1766+
auto db = kikimr.GetQueryClient();
1767+
1768+
CreateTexts(db);
1769+
UpsertTexts(db);
1770+
AddIndexCovered(db);
1771+
auto index = ReadIndex(db);
1772+
CompareYson(R"([
1773+
[["cats data"];[100u];"animals"];
1774+
[["cats data"];[100u];"cats"];
1775+
[["dogs data"];[200u];"cats"];
1776+
[["cats cats data"];[300u];"cats"];
1777+
[["cats data"];[100u];"chase"];
1778+
[["dogs data"];[200u];"chase"];
1779+
[["dogs data"];[200u];"dogs"];
1780+
[["foxes data"];[400u];"dogs"];
1781+
[["foxes data"];[400u];"foxes"];
1782+
[["cats cats data"];[300u];"love"];
1783+
[["foxes data"];[400u];"love"];
1784+
[["cats data"];[100u];"small"];
1785+
[["dogs data"];[200u];"small"]
1786+
])", NYdb::FormatResultSetYson(index));
1787+
1788+
{ // Select by one token
1789+
TString query = R"sql(
1790+
SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1791+
WHERE __ydb_token = "dogs"
1792+
ORDER BY Key
1793+
)sql";
1794+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1795+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1796+
CompareYson(R"([
1797+
[[200u];["dogs data"]];
1798+
[[400u];["foxes data"]]
1799+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1800+
}
1801+
1802+
{ // Select by two tokens using OR
1803+
TString query = R"sql(
1804+
SELECT DISTINCT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1805+
WHERE __ydb_token IN ("foxes", "animals")
1806+
ORDER BY Key
1807+
)sql";
1808+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1809+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1810+
CompareYson(R"([
1811+
[[100u];["cats data"]];
1812+
[[400u];["foxes data"]]
1813+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1814+
}
1815+
1816+
{ // Select by two tokens using AND
1817+
TString query = R"sql(
1818+
SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1819+
WHERE __ydb_token = "dogs"
1820+
INTERSECT
1821+
SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1822+
WHERE __ydb_token = "chase"
1823+
)sql";
1824+
auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
1825+
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
1826+
CompareYson(R"([
1827+
[[200u];["dogs data"]]
1828+
])", NYdb::FormatResultSetYson(result.GetResultSet(0)));
1829+
}
1830+
}
1831+
16961832
Y_UNIT_TEST(CreateTable) {
16971833
auto kikimr = Kikimr();
16981834
auto db = kikimr.GetQueryClient();

0 commit comments

Comments
 (0)