7
votes

I am new to Neo4j and Solr/Lucene. i have read that we can use lucene query in Neo4j how does this works? What is the use of using lucene query in Neo4j.?

And also i need a suggestion. I need to write an application to search and analyse the data. which might help me Neo4j Or Solr?

1
Perhaps you should explain more about your concrete use-case. What do you actually want to achieve?Michael Hunger
OK, i have information of employees - his name,home address, company address,company name, ph no etc.. The application gives you a search page where you can search on different criteria like name/(h/c)address, the result is employee matching with the search criteria and the employees that relates to search criteria(Eg:Depending on address or .. ) score should be appropriate to order the result.Shri

1 Answers

13
votes

Neo4J uses lucene as part of its legacy indexing. Right now, Neo4J supports several kinds of indexes, like creating labels on nodes, and indexes on node properties.

But before neo4j supported those new features, it primarily (and still) used Lucene for indexing. Most developers would create lucene indexes on particular node properties, to enable them to use lucene's query syntax to find nodes within a cypher query.

For example, if you created an index according to the documentation, you could then search the index for particular values like this:

IndexHits<Node> hits = actors.get( "name", "Keanu Reeves" );
Node reeves = hits.getSingle();

It's lucene behind the scenes that's actually doing that finding.

In cypher, it might look like this:

start n=node:node_auto_index('name:M* OR name:N*')
return n;

In this case, you're searching a particular index for all nodes that have a name property that starts either with an "M" or an "N". What's inside of that single quote expression there is just a query according to the lucene query syntax.

OK, so that's how Neo4J uses lucene. In recent versions, I only use these "legacy indexes" for fulltext indexing, which is where lucene's strength is. If I just want fast equality checks (where name="Neo") then I use regular neo4j schema indexes.

As for Solr, I haven't seen it used in conjunction with neo4j - maybe someone will jump in and provide a counter-example, but usually I think of Solr as running on top of a big lucene index, and in the case of neo4j, it's kind of in the middle there, and I'm not sure running Solr would be a good fit.

As for you needing to write an application to search and analyze data, I can't give you a recommendation - either Neo4J or Solr might help, depending on your application and what you want to do. In generalities, use neo4j when you need to express and search graphs. Use Solr more when you need to organize and search large volumes of text documents.