2013-06-15 39 views
6

Tôi đang sử dụng Titan Server (Cassandra) v 0.3.1. Tôi muốn tạo một chỉ mục trên một khóa/thuộc tính đỉnh mà tôi đã bắt đầu sử dụng. Tuy nhiên, trong documentation của họ, Titan giải thích rằng:Tạo chỉ mục trên thuộc tính đỉnh đã tồn tại trong Titan (Cassandra)?

To index vertices by key, the respective key index must be created before the key is first used in a vertex property.

Nếu tôi cố gắng tạo ra một chỉ mục trên một lĩnh vực đã tồn tại, tôi thấy một lỗi như mong đợi:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

Tuy nhiên, ngay cả khi tôi cố gắng để xóa ra khỏi đồ thị bằng cách loại bỏ tất cả các đỉnh & cạnh, tôi thấy các lỗi tương tự:

gremlin> g.E.remove() 
==>null 
gremlin> g.V.remove() 
==>null 
gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

Vì vậy, có vẻ như my_key vẫn tồn tại trong t ông lưu trữ dữ liệu cơ bản ngay cả sau khi tất cả các yếu tố đồ thị được loại bỏ. Điều này phù hợp với các tài liệu (mặc dù các yếu tố đã bị xóa thuộc tính đã được 'sử dụng lần đầu tiên'), nhưng dường như đáng để quay.

Bước tiếp theo của tôi là sẽ tạo lại một kho dữ liệu Cassandra hoàn toàn mới, nhưng tôi tự hỏi nếu có một lựa chọn tốt hơn.

Cách dễ nhất để tạo chỉ mục trên trường đã được sử dụng trong Titan là gì?

Trả lời

3

Điểm Titan đến một kho lưu trữ dữ liệu Cassandra mới và tạo chỉ mục trước khi chèn bất kỳ phần tử nào với thuộc tính đó.

gremlin> g.createKeyIndex("my_key",Vertex.class) 
==>null 
3

Thử tìm kiếm Gremlin này:

gremlin> g.V.each{g.removeVertex(it)} 

Bạn không cần phải loại bỏ Edges bằng tay, bởi vì nếu một đỉnh được lấy ra, tất cả các cạnh liên kết với nó sẽ tự động bị xóa. Và để loại bỏ tất cả các đỉnh bạn cần sử dụng truy vấn Lặp lại.

Khi biểu đồ bị xóa, bạn sẽ không cần một KeySpace mới. Sau đó, bạn có thể sử dụng:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
+0

Cảm ơn câu trả lời của bạn-- thật không may, điều đó dường như không làm điều này. Tôi nghĩ 'g.V.each {g.removeVertex (it)}' tương đương với 'g.V.remove()' ([xem liên quan] (http://stackoverflow.com/a/17250723/2172530)). Khi tôi thử phương pháp thay thế của bạn để loại bỏ các đỉnh, Titan có cùng khiếu nại: 'Không thể thêm chỉ mục vào khóa thuộc tính đã tồn tại: my_key'. – bcm360

+0

Bạn đã cam kết giao dịch sau khi xóa? – Pradatta

+0

Tôi đã làm, không có sự khác biệt: 'gremlin> g.V.each {g.removeVertex (it)}; g.commit(); g.createKeyIndex ("my_key", Vertex.class); Không thể thêm chỉ mục vào khóa thuộc tính đã có: my_key' – bcm360

Các vấn đề liên quan