Ricerca di testo completo in Cassandra;Ricerca completa di testo di Cassandra
Sono abbastanza nuovo per Cassandra e desidero capirlo più correttamente. Sto tentando di eseguire una ricerca full-text in Cassandra, ma dopo alcune ricerche ho trovato che ci non può essere un approccio "semplice" per questo .. e dico forse perché la prima pagina di Google non ha detto molto di nulla.
Quindi sto cercando di capire ora, invece, qual è l'approccio migliore qui .. Questo tipo di mi porta a prendere in mano le mie ipotesi basate su ciò che ho imparato finora su Cassandra, che si basa su questi due principi; a) progetta le tue tabelle in base alle tue query, piuttosto che ai dati, e b) more-data è una buona cosa, a patto che venga utilizzata correttamente.
Con ciò detto, ho trovato un paio di soluzioni che mi piacerebbe condividere, e chiedo anche che se qualcuno ha un'idea migliore, per favore riempimi su di esso prima di impegnarmi in qualcosa di irragionevole/ingenuo .
prima soluzione: creare una famiglia Colonna (CF), con due chiavi primarie e di un indice in questo modo:
CREATE TABLE "FullTextSearch" (
"PartialText" text,
"TargetIdentifier" uuid,
"CompleteText" text,
"Type" int,
PRIMARY KEY ("PartialText","TargetIdentifier")
);
CREATE INDEX IX_FullTextSearch_Type "keyspace"."FullTextSearch" ("Type");
Con la tabella di cui sopra, avrei bisogno di inserire righe per il testo "Ciao Mondo" come segue:
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;
Fondamentalmente, quanto sopra vi soddisfare la seguente jolly/partialtext "% o W%", "Ciao%", "Worl%"; Tuttavia non soddisfa parole parziali come "% ell%" per "Ciao", che posso sentire ok circa per ora ..... (OCD sorta calci qui)
Questo tipo di approccio fa schifo per me perché ora dovrei eliminare/reinserire ogni volta che si verifica una modifica di salvataggio/nome sul "TargetIdentifier";
La seconda soluzione, sarebbe molto simile solo questa volta facendo uso di colonne larghe; dove il tavolo potrebbe essere simile:
CREATE TABLE "FullTextSearch" (
"TargetIdentifier" uuid,
"Type" int,
"CompleteText" text,
PRIMARY KEY("TargetIdentifier")
);
e ora nel corso di un qualcosa di ricerca come:
SELECT * FROM "FullTextSearch" WHERE "He" = 1;
in modo che se esiste la colonna, le rispettive righe vengono restituite;
Terza Soluzione: simile a quello sopra, ma questa volta invece di utilizzare ampie colonne usiamo una colonna insieme come programma per i testi parziali, ed eseguire una query come:
SELECT * FROM "FullTextSearch" WHERE "PartialTexts"['He'] = 1;
Comunque , Sono tutto fuori di idee, è tardi, e posso solo sperare in una grande risposta! Per favore, fammi sapere cosa dovrei fare qui ... Sono sulla buona strada?