Yes, actually it's not that bad of an idea :) You control which properties
are going to be indexed with a configuration parameter up front and then you
just hand the PropertyContainer to the index and it'll index those
properties it was told to index, like:

   Index<Node> index = db.index().forNodes(MapUtil.stringMap(
       "provider", "lucene", "type", "exact", "keys_to_index", "name,title"
) );
   ...
   index.add( node );
   index.add( anotherNode );

You could still keep the add(entity,key,value) maybe for special cases? Or
maybe that'd be confusing.

2010/11/28 Peter Neubauer <peter.neuba...@neotechnology.com>

> Yes,
> totally true. We should talkt ot Mattias on the option of having some
> Index suppoerted that is configured upfront and then simply has
> index.add(PropertyContainer). Totally with you there :)
>
> Cheers,
>
> /peter neubauer
>
> GTalk:      neubauer.peter
> Skype       peter.neubauer
> Phone       +46 704 106975
> LinkedIn   http://www.linkedin.com/in/neubauer
> Twitter      http://twitter.com/peterneubauer
>
> http://www.neo4j.org               - Your high performance graph database.
> http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party.
>
>
>
> On Sun, Nov 28, 2010 at 6:08 PM, Craig Taverner <cr...@amanzi.com> wrote:
> > It seems we are still talking about different things. My request for an
> > index API is actually *simpler* than the existing standard in Neo4j. In
> fact
> > the existing API is already fine for creating the index, finding the
> index,
> > performing queries on the index, everything except one call,
> > index.add(node,string,object). I would prefer index.add(node).
> >
> > So, in terms of API, if we want to discuss simplicity, it is the other
> way
> > round. However, that is not the issue here. The main argument is all
> about
> > the *purpose of the index*. The existing API is explicitly for indexing
> > key/value pairs on PropertyContainers. While we could easily adapt this
> to
> > indexing other concepts, I have strong reservations about whether that is
> a
> > *good thing(tm)* to do. IMHO it might be somewhat confusing to the user
> for
> > the same API to be used for different concepts. So, what are our options
> > here?
> >
> > Take a look back at the method I mentioned above:
> > index.add(node,string,object). This call exposes the fundamental
> difference,
> > and that is that in the current implementation the name of the index
> really
> > defines a unique implementation of something that can index key-value
> pairs,
> > and then the key/value to index is specified on each and every add()
> call.
> > This allows the same index to be used for different properties (keys) in
> a
> > clean way. If we want to index more complex concepts, like geometry, or
> > multiple linked properties, we could not, and should not, just add new
> > versions of this call for those cases (like add(node,Geometry), or
> > add(node,key1,obj1,key2,obj2,key3,obj3)). IMHO, more complex cases should
> be
> > handled with a simpler API. Use index.add(node), and make the index
> instance
> > specific to the particular complication being dealt with. The current API
> > for creating, finding and querying can already handle all levels of
> > complexity. It is only the add() method that is specific to single
> key-value
> > pairs.
> >
> > This means we have two main options:
> >
> >   - Produce an extension/modification to the existing API allowing for
> >   index.add(propertyContainer) and keep the current index
> >   creation/finding/querying API as is. This would work and the two
> methods
> >   add(node,string,object) and add(node) would be the hint to the user
> that
> >   these are two different types of index. I'm still uncomfortable with
> this,
> >   because I think the difference is too subtle, and likely to lead to
> >   confusion.
> >   - Have a second index API focusing on the add(node) use case. The
> second
> >   API should be clearly different in intention from the first, because in
> this
> >   case the properties to index are specified at index creation, not when
> >   adding to the index. This is a very key difference which I think should
> be
> >   visible to the developer, so they do not mix the two up.
> >
> > And this gets us back to the original point. You must have some reason
> for
> > wanting to put other, non-key-value, indexes behind the existing
> key-value
> > index API. As you can tell, so far I can only see problems with this
> idea,
> > but I'm quite sure you can see advantages with it. Obviously these
> > advantages need to be taken into account.
> >
> > In my opinion the goal should be to achieve maximum overall simplicity
> and
> > clarity in using indexes of all types in Neo4j.
> >
> > On Sat, Nov 27, 2010 at 11:24 PM, Peter Neubauer <
> > peter.neuba...@neotechnology.com> wrote:
> >
> >> Mmh,
> >> as stated before, IMHO there can be different scenarios of usage of
> >> complex indexes. Of course there is a reason for GeoTools and GIS
> >> systems to have a more complicated API than a Lucene Text search
> >> index. GIS queries tend to be far more complex than text queries,
> >> especially when we want to combine them with other deep raversals
> >> through the graph. In that I agree with you Craig.
> >>
> >> However, I think there is a place for a simple API (with only simple
> >> support for features) that would satisfy a lot of users that are
> >> starting to explore the concept of multidimensional indexing and
> >> simple spatial capabilities, e.g. the stuff that MongoDB and CouchDB
> >> are exposing. It is just a tiny subset of what Neo4j Spatial can do,
> >> but a very approachable start for a lot of users.
> >>
> >> Let's see what we can do in putting Neo4j Spatials both behind
> >> powerful stacks like GeoTools, uDig and GeoServer (and of course a
> >> native traversal API), and expose some limited API through some "easy"
> >> approaches. I am not sure it will work out, it is only experimental at
> >> the moment, but well - this is open source, so let's experiment :)
> >>
> >> Cheers,
> >>
> >> /peter neubauer
> >>
> >> GTalk:      neubauer.peter
> >> Skype       peter.neubauer
> >> Phone       +46 704 106975
> >> LinkedIn   http://www.linkedin.com/in/neubauer
> >> Twitter      http://twitter.com/peterneubauer
> >>
> >> http://www.neo4j.org               - Your high performance graph
> database.
> >> http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party.
> >>
> >>
> >>
> >> On Fri, Nov 26, 2010 at 8:08 PM, Craig Taverner <cr...@amanzi.com>
> wrote:
> >> >>
> >> >> Any mechanism that make possible to build traversals with geospatial
> >> >> information through the REST API would be great.
> >> >> So, in some moment in the future, will be possible do traversals with
> >> >> geodata?, I mean, build traversals in which I could asking the nodes
> >> >> using geospatial operations like near, is a point of, overlap with,
> to
> >> >> a distance less than, etc.
> >> >>
> >> >
> >> > I think it should be relatively easy to add spatial extensions to the
> >> REST
> >> > server, but I've not been involved in the REST project much, so I'd
> need
> >> to
> >> > discuss this with others. Since the current REST API is based on JSON,
> >> the
> >> > preferred choice for the geometries would be GeoJSON, and I think it
> >> would
> >> > be nice to embed the GeoJSON objects directly in the REST JSON
> response
> >> > itself. Alternatively your idea of WKT embedded in a JSON value might
> >> work
> >> > well too. We might need some clever tricks to deal with paging large
> >> result
> >> > sets, but I guess that is an issue for all database queries.
> >> >
> >> > Deployment wise I think it would be great if simply adding the
> >> neo4j-spatial
> >> > jar to the Neo4j Server deployment would activate a few spatial
> queries
> >> that
> >> > could be used. I do not really agree with Peter that spatial can be
> >> slipped
> >> > behind existing API's. I think many, or most things, will require
> >> specific
> >> > spatial queries and spatial responses. I certainly believe this is
> true
> >> of
> >> > your suggested queries above: near, point of, overlaps with, etc.
> >> >
> >> > Cheers, Craig
> >> > _______________________________________________
> >> > Neo4j mailing list
> >> > User@lists.neo4j.org
> >> > https://lists.neo4j.org/mailman/listinfo/user
> >> >
> >> _______________________________________________
> >> Neo4j mailing list
> >> User@lists.neo4j.org
> >> https://lists.neo4j.org/mailman/listinfo/user
> >>
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Mattias Persson, [matt...@neotechnology.com]
Hacker, Neo Technology
www.neotechnology.com
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to