개념 증명을 위해 OrientDB를 사용하고 있으며 Java API를 통해 생성 된 클래스 / 복합 인덱스를 쿼리하는 데 문제가 있습니다.
클래스를 만들고 몇 가지 속성을 추가하고 API를 사용하여 복합 색인을 생성 한 다음 샘플 레코드를 추가했습니다. Studio를 사용하여 모든 것이 괜찮아 보이는지 확인했습니다. 그런 다음 getVertices(String label, String[] keys, Object[] values)
샘플 레코드를 가져 오려고했지만 결과를 얻지 못했습니다.
색인과 클래스를 제거하고 Studio UI를 사용하여 다시 만들고 getVertices 코드를 실행하면 레코드가 성공적으로 검색되었습니다.
조사 과정에서 Java API를 사용하여 클래스 / 인덱스를 다시 만들고 잘못된 레이블 (V를 확장 한 UI를 통해 생성 된 클래스)을 제공했고 레코드가 성공적으로 검색되었는데 이상했습니다.
Java에서 만든 클래스 / 색인이 UI에서 만든 것과 다르게 작동하는 이유는 무엇입니까? 내가 뭘 잘못하고 있니?
저는 OrientDB Enterprise 2.0.3과 2.0.x orientdb- * 및 blueprints-core jars를 사용하고 있습니다.
다음과 같이 Java 클래스 / 인덱스를 만들고 있습니다 (단순함을 위해 줄임, 무고한 사람을 보호하기 위해 문자열이 변경됨).
//graph is an OrientGraph
//Create a new class that extends V
OClass vt = graph.createVertexType("MyClass", "V");
String[] props = {"first", "second", "third"}; //Property names
for(String prop : props)
vt.createProperty(prop, OType.STRING);
//Create unique composite index using all properties
vt.createIndex("myClass.myIndex", OClass.INDEX_TYPE.UNIQUE, props);
graph.commit();
다음과 같이 그래프에 레코드를 추가하고 Studio에 표시되었음을 확인했습니다 (MyClass에서 * 선택).
Vertex v = graph.addVertex("class:MyClass");
v.setProperty("first", "foo");
v.setProperty("second", "bar");
v.setProperty("third", "ed");
graph.commit();
그래프를 쿼리하기 위해 다음을 사용합니다.
String[] keys = {"first", "second", "third"};
String[] values = {"foo", "bar", "ed"};
//Using getVertices to get records from a specific class with specified key values.
//There could be multiple classes with the same properties, so I have to be able
//to look for a set of properties within a specific class.
Iterable<Vertex> resultIterator = graph.getVertices("MyClass", keys, values);
for (Vertex v : resultIterator){
results.add(v); //Store result references for later use
}
또한 그것이 graph.isUseClassForVertexLabel()
사실임을 확인했습니다 .
내가 뛰면 graph.getVertices("MyClass",keys,values)
아무것도 돌아 오지 않습니다.
graph.getVertices("DummyClass",keys,values)
DummyClass가 V를 확장하고 MyClass와 완전히 다른 속성을 가진 Studio에서 생성 된 임의의 클래스 인 곳에서 실행 하면 결과가 나타납니다. 이 경우에는 결국 동일한 속성을 가진 여러 클래스가있을 수 있고 속성 집합을 사용하여 특정 클래스의 레코드를 쿼리 할 수 있어야하기 때문에 두렵습니다. 여러 데이터에서 결과를 가져오고 싶지 않습니다. 다른 수업 ...
Studio UI에서 MyClass를 다시 만들고를 실행 graph.getVertices("MyClass",keys,values)
하면 예상 한 결과가 나타납니다.
OrientDB repo에서 이에 대한 이슈 ( # 3889 )를 생성했습니다 . 수정되었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다