Tìm kiếm toàn văn trong Cassandra;Tìm kiếm toàn văn Cassandra
Tôi khá mới với Cassandra, và muốn hiểu nó đúng hơn. Tôi đang cố gắng thực hiện tìm kiếm Toàn văn trong Cassandra, nhưng sau một số nghiên cứu tôi đã thấy rằng có có thể không phải là cách tiếp cận "đơn giản" cho điều này .. và tôi nói có thể là vì trang đầu tiên của Google chưa từng nói nhiều thứ.
Vì vậy, tôi đang cố gắng để hiểu ngay bây giờ, cách tiếp cận tốt nhất ở đây là gì .. Loại này dẫn tôi để tạo nên các giả định của riêng tôi dựa trên những gì tôi đã học được cho đến nay về Cassandra, đó là dựa trên những hai hiệu trưởng; a) thiết kế các bảng của bạn dựa trên các truy vấn của bạn, thay vì dữ liệu và b) nhiều dữ liệu hơn là một điều tốt, miễn là nó đang được sử dụng đúng cách.
Với điều đó được nói, tôi đã đưa ra một vài giải pháp mà tôi muốn chia sẻ, và cũng hỏi rằng nếu có ai có ý tưởng hay hơn, vui lòng điền vào nó trước khi tôi cam kết bất cứ điều gì không hợp lý/ngây thơ .
Giải pháp thứ nhất: Tạo một gia đình Cột (CF), với hai khóa chính và một Index như vậy:
CREATE TABLE "FullTextSearch" (
"PartialText" text,
"TargetIdentifier" uuid,
"CompleteText" text,
"Type" int,
PRIMARY KEY ("PartialText","TargetIdentifier")
);
CREATE INDEX IX_FullTextSearch_Type "keyspace"."FullTextSearch" ("Type");
Với bảng trên, tôi sẽ cần phải chèn hàng cho các văn bản "Hello World" như sau:
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;
Về cơ bản, ở trên sẽ thỏa mãn các ký tự đại diện/một phần văn bản "% o W%", "Hello%", "Worl%"; Tuy nhiên nó sẽ không đáp ứng một phần từ như "% ell%" cho "Xin chào", mà tôi có thể cảm thấy alright về bây giờ ..... (OCD sorta đá ở đây)
Cách tiếp cận này loại sucks cho tôi bởi vì bây giờ tôi sẽ phải xóa/chèn lại bất cứ lúc nào một thay đổi lưu/tên xảy ra trên "TargetIdentifier";
Giải pháp thứ hai, sẽ rất giống với lần này khi sử dụng cột rộng; nơi bàn có thể trông giống như:
CREATE TABLE "FullTextSearch" (
"TargetIdentifier" uuid,
"Type" int,
"CompleteText" text,
PRIMARY KEY("TargetIdentifier")
);
và bây giờ trong một cái gì đó tìm kiếm như:
SELECT * FROM "FullTextSearch" WHERE "He" = 1;
để nếu cột tồn tại, các hàng tương ứng được trả về;
Giải pháp thứ ba: tương tự như trên, chỉ có thời gian này thay vì sử dụng rộng cột chúng tôi sử dụng một bộ cột như bản đồ cho các văn bản một phần, và thực hiện một truy vấn như:
SELECT * FROM "FullTextSearch" WHERE "PartialTexts"['He'] = 1;
Anyways , Tôi tất cả ra khỏi ý tưởng, nó là muộn, và tôi chỉ có thể hy vọng cho một phản ứng tuyệt vời! Xin vui lòng, cho tôi biết những gì tôi nên làm ở đây ... tôi thậm chí trên con đường bên phải?