Would it help if the index wasn't a full text index but a normal one - would that make it work?
More importantly, you say that cypher won't support writing to legacy indexes - and as I understand, currently full text index is of legacy type. Is there a plan to introduce a new, cypher-supported full text index in the future neo4j? I'd be happy to go with standard index for now if there was hope that in the future I can just change the index type and go. Thanks! Sent from my shiny Nexus 5 phone On Jul 1, 2014 9:32 AM, "Michael Hunger" <[email protected]> wrote: > Hey, > > you are totally right, this sucks. Let me explain why. > > right now Cypher can't update fulltext indexes, which SDN uses. These are > the legacy Neo4j indexes which require manual addition. > You're right this is really sucky, but except for coding (i.e. manually > adding the nodes, properties, values to that fulltext index) or using the > neo4j-shell for that index-update, I have no good idea. > > It was decided consciously that Cypher will not support writing to legacy > indexes. > > The only thing that you can do is to use a legacy auto-index configured > as fulltext > <http://jexp.de/blog/2014/03/full-text-indexing-fts-in-neo4j-2-0/>, but > as that index is read-only, SDN can't write to it, so the field would have > to be "read-only". Or we would have to add something to SDN that marks a > field as using that legacy auto-index and never actually writing to the > index itself. But then that also means this has to be taken into account > with every other read operation and query generation which makes it a > pretty big effort. > > So for now I'd rather advise to implement the CSV loading as SDN code > using OpenCSV as reader (which is what cypher uses too). > > String[] header = reader.nextRow(); > for (String[] row : reader.nextRow()) { > City city = template.save(new > City(get(row,header,"City"),template.save(new > Country(get(row,header,"Country"))); > Airport ap = template.save(new Airport(get(row,header,"Airport > "),get(row,header,"IATAcode"),get(row,header,"ICAOcode")); > ap.serve(city); > template.save(ap); > } > > Sorry for being not more helpful, > > Cheers, > > Michael > > On Tue, Jul 1, 2014 at 9:46 AM, Liliana Ziolek <[email protected]> > wrote: > >> Oh, in case that helps, I'm using Neo4j 2.1.2 and SDN 3.2.0-SNAPSHOT. >> >> >> On Tuesday, July 1, 2014 8:46:00 AM UTC+1, Liliana Ziolek wrote: >>> >>> Hi, >>> I'm trying to do - I thought - a rather simple thing - import data >>> through CSV import and then work with it via SDN. It doesn't seem to be >>> working though and not sure if I'm doing something silly or it doesn't >>> work. It seems to me that the data is created fine and SDN can access it >>> via findAll method, but it cannot find it using the indexed field. >>> >>> My POJO is quite simple, the important bit: >>> >>> public class City extends GraphNode { >>> @Indexed(indexType = IndexType.FULLTEXT, indexName = "locations") >>> private String name; >>> (... other fields) >>> } >>> >>> I have an SDN repository with the following methods: >>> public interface CityRepository extends GraphRepository<City> { >>> Page<City> findByNameLike(String name, Pageable page); >>> List<City> findByName(String cityName); >>> ... >>> } >>> On top of that a super-simple service that pretty much just wraps that >>> into @Transactional. >>> >>> Everything works fine when I use SDN to put the data in and take it out, >>> this passes fine: >>> locationService.addCity("Poznan", "Poland"); >>> List<City> citiesByNameLike = locationService. >>> getCitiesByNameLike("Pozn*"); >>> assertThat(citiesByNameLike, hasSize(1)); >>> assertThat(locationService.getCitiesByName("Poznan"), >>> equalTo(citiesByNameLike)); >>> >>> However, when I import it via CSV import and MERGE, even though I can >>> see that the city is actually there (when I run findAll), it doesn't come >>> back when I try to look it up by name. >>> CSV import query: >>> //csv fields: Airport,City,Country,IATAcode,ICAOcode >>> String cypherLoadCountries = "LOAD CSV WITH HEADERS FROM \"" + >>> fileLocation + "\" AS csvLine " >>> + "MERGE (country:Country:_Country { name: >>> csvLine.Country } ) " >>> + "MERGE (city:City:_City { name: csvLine.City } ) " >>> + "MERGE (city) - [:IS_IN] -> (country) " >>> + "MERGE (airport:Airport:_Airport {name: >>> csvLine.Airport, iataCode: csvLine.IATAcode, icaoCode: csvLine.ICAOcode} ) " >>> + "MERGE (airport) - [:SERVES {__type__: >>> 'AirportCityConnection'}] -> (city)"; >>> neo4jTemplate.query(cypherLoadCountries, ImmutableMap.of()); >>> >>> Am I doing something silly here? Is there meant to be a call to switch >>> on indexing or perhaps SDN indexes a different field? >>> Any help appreciated. >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Neo4j" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Neo4j" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/neo4j/w44ApzfsRQI/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
