Cassandra全文檢索;Cassandra全文檢索
我對Cassandra相當陌生,並且希望更正確地理解它。我試圖在卡桑德拉進行全文搜索,但經過一些研究後,我發現有可能不是一個「簡單」的方法..我說也許是因爲谷歌的第一頁沒有說過很多東西。
所以我現在想要了解現在的情況,最好的方法是什麼......這種引導我根據我迄今爲止對Cassandra學到的知識構建了自己的假設,即基於這些假設兩位校長; a)根據您的查詢設計您的表格,而不是數據,以及b)只要使用得當,更多數據是件好事。這樣說,我想出了一些我想分享的解決方案,並且要求如果有人有一個更好的主意,請在我承諾任何不合理/天真。
首個解決方案:創建柱族(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 「%öW%」, 「你好%」, 「WORL%」;然而,它不會滿足部分詞語,如「你好」的「%ell%」,我現在可以感覺到好吧 .....(OCD sorta踢在這裏)
這種方法很糟糕對我來說,因爲我現在必須在「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;
反正,我全都沒有想法,已經很晚了,我只希望得到一個很好的迴應!請讓我知道我應該在這裏做什麼...我是否在正確的道路上?