Полнотекстовый поиск в Кассандре;
Я новичок в Cassandra и хочу понять ее более правильно. Я пытаюсь выполнить полнотекстовый поиск в Кассандре, но после некоторых исследований я обнаружил, что для этого может быть не "простой" подход. И я говорю, может быть, потому, что первая страница Google не много говорила что-нибудь.
Итак, теперь я пытаюсь понять, что здесь лучше всего подходит. Такой подход побуждает меня принимать мои собственные предположения, основываясь на том, что я узнал до сих пор о Кассандре, основанной на этих двух директора школы; а) проектируйте свои таблицы на основе ваших запросов, а не данных, и б) больше данных - это хорошо, если оно используется должным образом.
С учетом сказанного, я придумал пару решений, которые хотел бы поделиться, а также спросить, есть ли у кого-то лучшее представление, пожалуйста, заполните меня, прежде чем я передам что-либо необоснованное/наивное.
Первое решение: создайте семейство столбцов (CF) с двумя первичными ключами и индексом:
CREATE TABLE "FullTextSearch" (
"PartialText" text,
"TargetIdentifier" uuid,
"CompleteText" text,
"Type" int,
PRIMARY KEY ("PartialText","TargetIdentifier")
);
CREATE INDEX IX_FullTextSearch_Type "keyspace"."FullTextSearch" ("Type");
В приведенной выше таблице мне нужно будет вставить строки для текста "Hello World" следующим образом:
BATCH APPLY;
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("H",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("He",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Hel",000000000-0000-0000-0000-000000000,"Hello World",1);
.....
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Hello Wor",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Hello Worl",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Hello World",000000000-0000-0000-0000-000000000,"Hello World",1);
.....
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Wor",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("Worl",000000000-0000-0000-0000-000000000,"Hello World",1);
INSERT INTO "FullTextSearch" ("PartialText","TargetIdentifier","CompleteText","Type") VALUES ("World",000000000-0000-0000-0000-000000000,"Hello World",1);
END BATCH;
В основном вышеприведенное будет удовлетворять следующим подстановочным символам /partialtext "% o W%", "Hello%", "Worl%"; Однако он не будет удовлетворять частичным словам, таким как "% ell%" для "Hello", на который я могу чувствовать себя хорошо сейчас... (здесь происходит сортировка OCD)
Этот подход отстой для меня, потому что теперь мне нужно будет удалить/повторно вставить любое время, когда смена "Сохранить/имя" происходит в "TargetIdentifier";
Второе решение будет очень похоже только на этот раз, используя широкие столбцы; где таблица может выглядеть так:
CREATE TABLE "FullTextSearch" (
"TargetIdentifier" uuid,
"Type" int,
"CompleteText" text,
PRIMARY KEY("TargetIdentifier")
);
и теперь во время поиска что-то вроде:
SELECT * FROM "FullTextSearch" WHERE "He" = 1;
чтобы, если столбец существует, возвращаются соответствующие строки;
Третье решение: аналогично приведенному выше, только на этот раз вместо использования широкоугольных столбцов мы используем набор столбцов, таких как карта для частичных текстов, и выполняем запрос типа:
SELECT * FROM "FullTextSearch" WHERE "PartialTexts"['He'] = 1;
В любом случае, у меня все из идей, уже поздно, и я могу только надеяться на отличный ответ! Пожалуйста, дайте мне знать, что я должен делать здесь... Я даже на правильном пути?