0
嗨我試圖搜索使用運算符IN,但總是返回一個空列表,什麼是錯的?波紋管我的單元測試。我想要的是通過描述或相似詞來搜索產品。 (未來我假裝實現模糊)。neo4j和java收集搜索
private GraphDatabaseService graph;
private Index<Node> indexProduct;
private ExecutionEngine engine;
@Before
public void prepareTestDatabase() {
TestGraphDatabaseFactory testGraphDatabaseFactory = new TestGraphDatabaseFactory();
this.graph = testGraphDatabaseFactory.newEmbeddedDatabase("/tmp/neo4j/tests");
this.indexProduct = this.graph.index().forNodes("node_product");
this.engine = new ExecutionEngine(this.graph, StringLogger.SYSTEM);
this.loadDataForTest();
}
private void loadDataForTest() {
Transaction tx = this.graph.beginTx();
List<String> similarities = new ArrayList<>();
similarities.add("televisor");
similarities.add("tv");
String description = "televisão";
Product product = new Product(description, similarities);
Node node = this.graph.createNode(DynamicLabel.label(product.description));
node.setProperty("description", product.description);
node.setProperty("similarities", product.similarities);
this.indexProduct.add(node, "PRODUCT", product.description);
tx.success();
tx.finish();
}
@Test
public void searchByDescription(){
String description = "televisão";
List<String> list = new ArrayList<>();
ExecutionResult result = this.engine.execute("start n=node:node_product('PRODUCT:*') WHERE HAS(n.similarities) AND n.similarities IN ['tv'] return n.description");
for (Map<String, Object> row : result) {
for (Entry<String, Object> column : row.entrySet()) {
Object value = column.getValue();
list.add(String.valueOf(value));
}
}
Assert.assertTrue(list.contains(description));
}
這是產品類
class Product {
String description;
String[] similarities;
Product(String description, List<String> similaritiesList) {
super();
this.description = description;
this.similarities = new String[similaritiesList.size()];
for (int i=0; i<similaritiesList.size(); i++)
this.similarities[i] = similaritiesList.get(i);
}
這就是它的人...我剛剛開始與neo4j昨天...謝謝 – giullianomorroni