2012-11-29 5 views
5

Chciałbym użyć mojego auto_index w neo4j i przekazać tablicę ciągów do dopasowania przeciwko. Wiem, że możesz dodać klauzulę IN na końcu swojej kwerendy, ale nie używa ona indeksów i zakładam, że wykona skanowanie bazy danych wszystkich rekordów. Jaki jest najlepszy sposób, aby to zrobić z zapytaniem indeksu?kwerendy z klauzula "IN" przy użyciu indeksu w neo4j z Cypher

np. Zdobądź dla mnie użytkowników, których facebookId jest w ["123", "456", "789"] zakładając, że na facebookId znajduje się auto_index i jest milion użytkowników.

Odpowiedz

11

przypuszczam to jest warte opublikowania jako odpowiedź:

START n=node:node_auto_index('facebookId:("123", "456", "789")') 
... 

Przykład: http://console.neo4j.org/r/3mcvr5

+0

dzięki, że załatwiłeś sprawę. – MonkeyBonkey

+0

Dla zapisu, ograniczona do 512 pól z aktualnym Neo 1.9.M04. (myślę, że używa Lucene 3.5) –

+0

Dzięki, pomogło mi to – jarandaf

1

Można by zrobić to zapytanie poprzez wyraźne wyszukiwanie indeksu, jak

start user = node:node_auto_index('facebookId:123 OR facebookId:456') match ... 

http://console.neo4j.org/r/nj98lt dla przykładu.

+0

Przypuszczam, że będzie działać, ale to może się bardzo długo, jeśli mam 20 lub 30 identyfikatorów, aby dopasować przeciwko. Nie ma innego czystszego sposobu robienia tego? – MonkeyBonkey

+0

BTW gdzie jest dokumentacja na temat tego, jakie operatory i parametry mogą być przekazywane w zapytaniu indeksu w szyfratorze? – MonkeyBonkey

+1

Większość rzeczy jest tutaj. Jest przekazywana bezpośrednio do Lucene dla domyślnych indeksów: http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/queryparsersyntax.html#Overview –