2014-10-08 14 views
5

Jestem nowy w Neo4j i Solr/Lucene. Czytałem, że możemy używać zapytania Lucene w Neo4j, jak to działa? Jaki jest pożytek z używania zapytania lucenowego w Neo4j?Jak działa lucene z Neo4j

A także potrzebuję sugestii. Muszę napisać aplikację do wyszukiwania i analizy danych. which might help me Neo4j Or Solr?

+0

Być może powinieneś wyjaśnić więcej o swoim konkretnym przypadku użycia. Co właściwie chcesz osiągnąć? –

+0

OK, mam informacje o pracownikach - jego imię i nazwisko, adres domowy, adres firmy, nazwa firmy, ph itd. Aplikacja oferuje stronę wyszukiwania, na której można wyszukiwać według różnych kryteriów, takich jak nazwa/(h/c) adres, wynikiem jest dopasowanie pracownika do kryteriów wyszukiwania i pracowników związanych z kryteriami wyszukiwania (np. w zależności od adresu lub ..) wynik powinien być odpowiedni do zamówienia wyniku. – Shri

Odpowiedz

10

Neo4J używa lucene jako część swojej legacy indexing. Obecnie Neo4J obsługuje kilka rodzajów indeksów, takich jak tworzenie etykiet na węzłach i indeksy właściwości węzłów.

Ale zanim neo4j obsługiwał te nowe funkcje, głównie (i wciąż) używał Lucene do indeksowania. Większość programistów tworzyłoby lucene indeksy na poszczególnych właściwościach węzła, aby umożliwić im wykorzystanie składni kwerendy lucene do znajdowania węzłów w zapytaniu kwerendowym.

Na przykład, jeśli created an index according to the documentation, można następnie przeszukać indeks dla poszczególnych wartości tak:

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

To Lucene za kulisami, że rzeczywiście robi tego stwierdzenia.

W Cypher, może to wyglądać tak:

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

W tym przypadku, szukasz konkretnego indeksu dla wszystkich węzłów, które mają właściwość nazwie zaczynającej albo z „M” lub " N ". Co jest w środku tego pojedynczego wyrażenia cytatu, istnieje tylko zapytanie zgodne z the lucene query syntax.

OK, więc tak właśnie Neo4J używa lucenu. W najnowszych wersjach używam tylko tych "starszych indeksów" do indeksowania pełnotekstowego, gdzie jest siła lucena. Jeśli chcę tylko szybkich kontroli równości (gdzie nazwa = "Neo"), wtedy używam regular neo4j schema indexes.

Jeśli chodzi o Solr, nie widziałem, aby był używany w połączeniu z neo4j - może ktoś wskoczy i będzie stanowić kontrprzykład, ale zazwyczaj myślę o Solr jako o działaniu na duży wskaźnik lucowy, aw przypadek neo4j, jest w środku, i nie jestem pewien, czy bieganie Solr będzie dobre.

Jeśli chcesz napisać aplikację do wyszukiwania i analizowania danych, nie mogę dać ci rekomendacji - Neo4J lub Solr mogą pomóc, w zależności od aplikacji i tego, co chcesz zrobić. Ogólnie rzecz biorąc, użyj neo4j, gdy potrzebujesz wyrazić i przeszukać wykresy. Użyj Solr więcej, gdy potrzebujesz uporządkować i przeszukać duże ilości dokumentów tekstowych.

+0

Byłem pod wrażeniem, że nadal używa Lucene pod maską do jego nowoczesnego indeksowania, po prostu obsługuje wszystkie tworzenie/usuwanie indeksu i kwerendy w trybie cichym dla użytkownika? – subvertallchris

+0

Który jest bardziej wydajny/szybszy? czy jest to tworzenie indeksu lucenu (indeksu legacy), czy schematu (na węźle)? – Shri

+2

"Wcześniejsze indeksy" są starsze. Jeśli potrzebujesz porównania równości, użyj indeksów schematu, o których wspomniałem. Są szybsze, ponieważ wierzę, że kiedy zapytanie typu cypher tworzy plan, staje się ono bardziej selektywne w oparciu o indeksy schematu, a nie z indeksami LUCEN.Teraz, jeśli już mówimy, jeśli potrzebujesz pełnego tekstu, neo4j nie oferuje innej alternatywy - więc do tego powinieneś trzymać się indeksów Lucene, IMHO. tl; dr to zależy od tego, co chcesz zrobić. – FrobberOfBits