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 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.
