2014-09-16 16 views
5

Tôi đang sử dụng neo4j 2.1.4. Tôi có nút - POINT và các mối quan hệ - ROAD Tôi có chỉ số về sở hữu ROAD - OBJ_CODLàm thế nào để sử dụng chỉ số mối quan hệ trong Cypher

:schema ls -l :ROAD 

Indexes 
    ON :ROAD(OBJ_COD) ONLINE 
    ON :ROAD(ID)  ONLINE 

No constraints 

Tôi muốn tìm kiếm ROAD bởi giá trị OBJ_COD, nhưng chỉ số don'use cypher để tra cứu mối quan hệ.

neo4j-sh (?)$ profile MATCH (a)-[r:`ROAD` {ID:333275}]-(b:`POINT`) RETURN r LIMIT 1; 

ColumnFilter 
    | 
    +TraversalMatcher 

+------------------+------+---------+-------------+----------------+ 
|   Operator | Rows | DbHits | Identifiers |   Other | 
+------------------+------+---------+-------------+----------------+ 
|  ColumnFilter | 2 |  0 |    | keep columns r | 
| TraversalMatcher | 2 | 2265843 |    |  a, r, a | 
+------------------+------+---------+-------------+----------------+ 

Làm cách nào để buộc cypher sử dụng chỉ mục hiện có để tìm kiếm mối quan hệ đơn lẻ?

Trả lời

4

index Schema chỉ có sẵn trên các nút. Sự cần thiết phải có các chỉ mục về các mối quan hệ hầu như luôn luôn tiết lộ một vấn đề trong mô hình hóa dữ liệu đồ thị của bạn. Thông thường, bạn sử dụng các chỉ mục để tra cứu các điểm bắt đầu cho các quá trình truyền tải đồ thị. thực hành mô hình tốt là bất cứ điều gì trong phạm vi của bạn trở thành một thing hoặc entity phải là một nút và mối quan hệ đặt things của bạn thành một bối cảnh ngữ nghĩa. Nếu bạn làm theo điều này và các truy vấn của bạn bắt đầu tại something, sẽ không cần phải lập chỉ mục các mối quan hệ.

Tuy nhiên có một số trường hợp hiếm hoi mà mối quan hệ chỉ mục có thể là một lựa chọn hợp lệ. Trong trường hợp này, bạn cần phải quay trở lại để sử dụng các chỉ mục kế thừa cho các mối quan hệ. Xem lại số fine documentation để biết cách chúng hoạt động.

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