neo4j and java collection search -
hi i'm trying search using operator in, return empty list, wrong ? bellow unit test. whta want search product descriptio or similarity word macths description. (futurely pretend implement fuzzy).
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:*') has(n.similarities) , n.similarities in ['tv'] return n.description"); (map<string, object> row : result) { (entry<string, object> column : row.entryset()) { object value = column.getvalue(); list.add(string.valueof(value)); } } assert.asserttrue(list.contains(description)); } this product class
class product { string description; string[] similarities; product(string description, list<string> similaritieslist) { super(); this.description = description; this.similarities = new string[similaritieslist.size()]; (int i=0; i<similaritieslist.size(); i++) this.similarities[i] = similaritieslist.get(i); }
i hope got usecase right. think there's little confusion in cypher query. query:
"start n=node:node_product('product:*') has(n.similarities) , n.similarities in ['tv'] return n.description" lets have on n.similarities in ['tv']. property similarities array. ['tv'] an array of strings. thus, expression `n.similarities in ['tv'] evaluates false because ['tv'] not contain arrays, let alone similarities array.
in end figure meant else, viz.
'tv' in n.similarities could right? want check whether string tv contained in similarities array. when change query way, i.e. resulting query be
start n=node:node_product('product:*') has(n.similarities) , 'tv' in n.similarities return n.description then, adapted test class works me.
Comments
Post a Comment