@@ -862,6 +862,171 @@ public void testClientWarningOnNGram()
862862 " \" filters\" :[{\" name\" :\" porterstem\" }]}'}" );
863863 }
864864
865+ @ Test
866+ public void testAnalyzerOnSet () throws Throwable
867+ {
868+ createTable ("CREATE TABLE %s (id text PRIMARY KEY, genres set<text>)" );
869+ execute ("INSERT INTO %s (id, genres) VALUES ('1', {'Horror', 'comedy'})" );
870+
871+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'Horror' ALLOW FILTERING" ), row ("1" ));
872+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'Horror' ALLOW FILTERING" ));
873+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'horror' ALLOW FILTERING" ));
874+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'horror' ALLOW FILTERING" ), row ("1" ));
875+
876+ createIndex ("CREATE CUSTOM INDEX ON %s(genres) USING 'StorageAttachedIndex' WITH OPTIONS = { 'index_analyzer':'STANDARD'}" );
877+
878+ beforeAndAfterFlush (() -> {
879+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'horror'" ), row ("1" ));
880+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'horror'" ));
881+ });
882+ }
883+
884+ @ Test
885+ public void testAnalyzerOnSetWithDistinctQueryAnalyzer () throws Throwable
886+ {
887+ createTable ("CREATE TABLE %s (k int, c int, v set<text>, PRIMARY KEY(k, c))" );
888+ createIndex ("CREATE CUSTOM INDEX ON %s(v) USING 'StorageAttachedIndex' WITH OPTIONS = {" +
889+ "'index_analyzer': '{" +
890+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
891+ " \" filters\" : [ { \" name\" : \" lowercase\" , \" args\" : {} }, " +
892+ " { \" name\" : \" edgengram\" , \" args\" : { \" minGramSize\" :\" 1\" , \" maxGramSize\" :\" 30\" } }]," +
893+ " \" charFilters\" : []}', " +
894+ "'query_analyzer': '{" +
895+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
896+ " \" filters\" : [ {\" name\" : \" lowercase\" ,\" args\" : {}} ]}'}" );
897+
898+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 1, {'astra quick fox', 'astra quick foxes', 'astra4', 'astra5 -1@a#', 'lazy dog'})" );
899+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 2, {'astra quick fox'})" );
900+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 3, {'astra quick foxes'})" );
901+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 4, {'astra4'})" );
902+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 5, {'astra5 -1@a#'})" );
903+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 6, {'lazy dog'})" );
904+
905+ beforeAndAfterFlush (() -> {
906+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'ast'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
907+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
908+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra4'" ), row (1 ), row (4 ));
909+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra5'" ), row (1 ), row (5 ));
910+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra9'" ));
911+
912+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'ast'" ), row (6 ));
913+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra'" ), row (6 ));
914+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra4'" ), row (2 ), row (3 ), row (5 ), row (6 ));
915+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra5'" ), row (2 ), row (3 ), row (4 ), row (6 ));
916+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra9'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ), row (6 ));
917+ });
918+ }
919+
920+ @ Test
921+ public void testAnalyzerOnList () throws Throwable
922+ {
923+ createTable ("CREATE TABLE %s (id text PRIMARY KEY, genres list<text>)" );
924+ execute ("INSERT INTO %s (id, genres) VALUES ('1', ['Horror', 'comedy'])" );
925+
926+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'Horror' ALLOW FILTERING" ), row ("1" ));
927+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'Horror' ALLOW FILTERING" ));
928+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'horror' ALLOW FILTERING" ));
929+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'horror' ALLOW FILTERING" ), row ("1" ));
930+
931+ createIndex ("CREATE CUSTOM INDEX ON %s(genres) USING 'StorageAttachedIndex' WITH OPTIONS = { 'index_analyzer':'STANDARD'}" );
932+
933+ beforeAndAfterFlush (() -> {
934+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS 'horror'" ), row ("1" ));
935+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS 'horror'" ));
936+ });
937+ }
938+
939+ @ Test
940+ public void testAnalyzerOnListWithDistinctQueryAnalyzer () throws Throwable
941+ {
942+ createTable ("CREATE TABLE %s (k int, c int, v list<text>, PRIMARY KEY(k, c))" );
943+ createIndex ("CREATE CUSTOM INDEX ON %s(v) USING 'StorageAttachedIndex' WITH OPTIONS = {" +
944+ "'index_analyzer': '{" +
945+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
946+ " \" filters\" : [ { \" name\" : \" lowercase\" , \" args\" : {} }, " +
947+ " { \" name\" : \" edgengram\" , \" args\" : { \" minGramSize\" :\" 1\" , \" maxGramSize\" :\" 30\" } }]," +
948+ " \" charFilters\" : []}', " +
949+ "'query_analyzer': '{" +
950+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
951+ " \" filters\" : [ {\" name\" : \" lowercase\" ,\" args\" : {}} ]}'}" );
952+
953+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 1, ['astra quick fox', 'astra quick foxes', 'astra4', 'astra5 -1@a#', 'lazy dog'])" );
954+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 2, ['astra quick fox'])" );
955+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 3, ['astra quick foxes'])" );
956+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 4, ['astra4'])" );
957+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 5, ['astra5 -1@a#'])" );
958+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 6, ['lazy dog'])" );
959+
960+ beforeAndAfterFlush (() -> {
961+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'ast'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
962+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
963+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra4'" ), row (1 ), row (4 ));
964+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra5'" ), row (1 ), row (5 ));
965+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS 'astra9'" ));
966+
967+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'ast'" ), row (6 ));
968+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra'" ), row (6 ));
969+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra4'" ), row (2 ), row (3 ), row (5 ), row (6 ));
970+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra5'" ), row (2 ), row (3 ), row (4 ), row (6 ));
971+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS 'astra9'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ), row (6 ));
972+ });
973+ }
974+
975+ @ Test
976+ public void testAnalyzerOnMapKeys () throws Throwable
977+ {
978+ createTable ("CREATE TABLE %s (id text PRIMARY KEY, genres map<text, int>)" );
979+ execute ("INSERT INTO %s (id, genres) VALUES ('1', {'Horror' : 1, 'comedy' : 2})" );
980+
981+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS KEY 'Horror' ALLOW FILTERING" ), row ("1" ));
982+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS KEY 'Horror' ALLOW FILTERING" ));
983+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS KEY 'horror' ALLOW FILTERING" ));
984+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS KEY 'horror' ALLOW FILTERING" ), row ("1" ));
985+
986+ createIndex ("CREATE CUSTOM INDEX ON %s(KEYS(genres)) USING 'StorageAttachedIndex' WITH OPTIONS = { 'index_analyzer':'STANDARD'}" );
987+
988+ beforeAndAfterFlush (() -> {
989+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres CONTAINS KEY 'horror'" ), row ("1" ));
990+ assertRowsNet (executeNet ("SELECT id FROM %s WHERE genres NOT CONTAINS KEY 'horror'" ));
991+ });
992+ }
993+
994+ @ Test
995+ public void testAnalyzerOnMapKeysWithDistinctQueryAnalyzer () throws Throwable
996+ {
997+ createTable ("CREATE TABLE %s (k int, c int, v map<text, int>, PRIMARY KEY(k, c))" );
998+ createIndex ("CREATE CUSTOM INDEX ON %s(KEYS(v)) USING 'StorageAttachedIndex' WITH OPTIONS = {" +
999+ "'index_analyzer': '{" +
1000+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
1001+ " \" filters\" : [ { \" name\" : \" lowercase\" , \" args\" : {} }, " +
1002+ " { \" name\" : \" edgengram\" , \" args\" : { \" minGramSize\" :\" 1\" , \" maxGramSize\" :\" 30\" } }]," +
1003+ " \" charFilters\" : []}', " +
1004+ "'query_analyzer': '{" +
1005+ " \" tokenizer\" : { \" name\" : \" whitespace\" , \" args\" : {} }," +
1006+ " \" filters\" : [ {\" name\" : \" lowercase\" ,\" args\" : {}} ]}'}" );
1007+
1008+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 1, {'astra quick fox':0, 'astra quick foxes':0, 'astra4':0, 'astra5 -1@a#':0, 'lazy dog':0})" );
1009+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 2, {'astra quick fox':0})" );
1010+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 3, {'astra quick foxes':0})" );
1011+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 4, {'astra4':0})" );
1012+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 5, {'astra5 -1@a#':0})" );
1013+ execute ("INSERT INTO %s (k, c, v) VALUES (0, 6, {'lazy dog':0})" );
1014+
1015+ beforeAndAfterFlush (() -> {
1016+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS KEY 'ast'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
1017+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS KEY 'astra'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ));
1018+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS KEY 'astra4'" ), row (1 ), row (4 ));
1019+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS KEY 'astra5'" ), row (1 ), row (5 ));
1020+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v CONTAINS KEY 'astra9'" ));
1021+
1022+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS KEY 'ast'" ), row (6 ));
1023+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS KEY 'astra'" ), row (6 ));
1024+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS KEY 'astra4'" ), row (2 ), row (3 ), row (5 ), row (6 ));
1025+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS KEY 'astra5'" ), row (2 ), row (3 ), row (4 ), row (6 ));
1026+ assertRowsNet (executeNet ("SELECT c FROM %s WHERE v NOT CONTAINS KEY 'astra9'" ), row (1 ), row (2 ), row (3 ), row (4 ), row (5 ), row (6 ));
1027+ });
1028+ }
1029+
8651030 private void assertClientWarningOnNGram (String indexOptions )
8661031 {
8671032 createIndexFromOptions (indexOptions );
0 commit comments