Sure thing! and your original problem (.toString()) is now fixed as per your suggestion.
Best, Mattias 2011/6/29 Balazs E. Pataki <pat...@dsd.sztaki.hu> > OK, I will then try use this as a "feature". We will always have the > source to hack it back in case these "_e" fields go away in the future. :-) > --- > balazs > > On 6/29/11 10:22 AM, Mattias Persson wrote: > > Reading the source is always a good thing :) > > > > I don't see them changing in the near future, and even if it's a bit of a > > hack to use them (since they are there mostly to be able to remove stuff) > > I've used them also in at least one scenario. I think you can give it a > go, > > but it's not an "official" feature that could potentially change. > > > > 2011/6/29 Balazs E. Pataki<pat...@dsd.sztaki.hu> > > > >> Great, thank you! > >> > >> Another thing I just found in IndexType: for a fulltext index each field > >> is stored as fulltext (tokenized into terms) and there's also an "exact" > >> field (the same index postfixed with "_e"). I think this feature is not > >> documented officially, so my question is, whether we can count on these > >> "_e" fields to exist in the lucene index in future versions of neo4j as > >> well? Because I would be glad to use it. > >> > >> In my application I have text content which I index in a "fulltext" > >> neo4j/lucene index, but I also have to store it in "exact" form. Without > >> knowing about this "_e" feature I had to do this "exact" indexing by > >> tweaking the content (replacing spaces with "_" and doing the same with > >> search terms). If I could instead depend on "_e" fields, I could get rid > >> of my own exact index tweaking and my index would be half as big. > >> > >> Do you think I can safely depend on these implicit exact indexed fields > >> in fulletxt indexes? > >> > >> Regards, > >> --- > >> balazs > >> > >> On 6/29/11 7:44 AM, Mattias Persson wrote: > >>> Wow, thank you for finding that. Well done! > >>> > >>> I'll fix it and if it doesn't break anything else then I'll commit it. > >>> > >>> Best, > >>> Mattias > >>> > >>> Den tisdagen den 28:e juni 2011 skrev Balazs E. Pataki< > >> pat...@dsd.sztaki.hu>: > >>>> Hi Mattias, > >>>> > >>>> Thanks for the tip! > >>>> > >>>> I started to look around and I think I found something. When > "fulltext" > >>>> type index is created its type will be CustomType (subclass of > IndexType > >>>> - IndexType is used for "exact" indexes) in neo4j. CustomType > overrides > >>>> the addToDocument() of IndexType method, which is the function that > >>>> actually created a Lucene field. > >>>> > >>>> IndexType's looks like this: > >>>> > >>>> public void addToDocument( Document document, String key, Object value > ) > >>>> { > >>>> document.add( instantiateField( key, value, Index.NOT_ANALYZED ) > ); > >>>> } > >>>> > >>>> CustomType's implementation on teh other hand: > >>>> > >>>> @Override > >>>> public void addToDocument( Document document, String key, Object value > ) > >>>> { > >>>> document.add( new Field( exactKey( key ), value.toString(), > >>>> Store.YES, Index.NOT_ANALYZED ) ); > >>>> document.add( instantiateField( key, value.toString(), > >> Index.ANALYZED > >>>> ) ); > >>>> } > >>>> > >>>> What I can see here is that CustomType's version explicitely converts > >>>> value to a String and therefore instantiateField won't detect it as a > >>>> number and will not create a NumericField for it. > >>>> > >>>> Could this be the root of the problem? > >>>> > >>>> I just replaced 'value.toString()' with 'value', and now my test runs > OK > >>>> (and fulltext search for terms still work beside numeric range > queries). > >>>> > >>>> Regards, > >>>> --- > >>>> balazs > >>>> > >>>> On 6/28/11 4:41 PM, Mattias Persson wrote: > >>>>> Hi Balazs, > >>>>> > >>>>> I think the issue could be in lucene, with the mix of the > >>>>> white-space-tokenizing-analyzer and numeric values. I don't know. > What > >> I see > >>>>> in neo4j is that it treats the values the exact same way, the queries > >> to the > >>>>> index is exactly the same, but it just doesn't return any values. I > >> think > >>>>> there needs to be some more googling around this to get more answers. > >>>>> > >>>>> > >>>>> 2011/6/28 Balazs E. Pataki<pat...@dsd.sztaki.hu> > >>>>> > >>>>>> Hi, > >>>>>> > >>>>>> I'm playing around with indexing and numeric range queries according > >> to > >>>>>> this documentation: > >>>>>> > >>>>>> > >> http://docs.neo4j.org/chunked/snapshot/indexing-lucene-extras.html > >>>>>> > >>>>>> According to my tests numeric range queries > >>>>>> (QueryContext.numericRange()) only have effect when "exact" type > index > >>>>>> is used. > >>>>>> > >>>>>> > >>>>>> I tried this: > >>>>>> > >>>>>> Transaction tx = graphDb.beginTx(); > >>>>>> try { > >>>>>> > >>>>>> Index<Node> exactIndex = > graphDb.index().forNodes("exactIndex", > >>>>>> MapUtil.stringMap( IndexManager.PROVIDER, "lucene", "type", "exact" > >> )); > >>>>>> Index<Node> fulltextIndex = > >> graphDb.index().forNodes("fulltextIndex", > >>>>>> MapUtil.stringMap( IndexManager.PROVIDER, "lucene", "type", > "fulltext" > >> )); > >>>>>> > >>>>>> Node n1 = graphDb.createNode(); > >>>>>> n1.setProperty("foo", 5); > >>>>>> exactIndex.add(n1, "foo", ValueContext.numeric(5)); > >>>>>> fulltextIndex.add(n1, "foo", ValueContext.numeric(5)); > >>>>>> > >>>>>> Node n2 = graphDb.createNode(); > >>>>>> n2.setProperty("foo", 25); > >>>>>> exactIndex.add(n2, "foo", ValueContext.numeric(25)); > >>>>>> fulltextIndex.add(n2, "foo", ValueContext.numeric(25)); > >>>>>> > >>>>>> // Force commit > >>>>>> tx.success(); > >>>>>> tx.finish(); > >>>>>> tx = graphDb.beginTx(); > >>>>>> > >>>>>> //Search exact > >>>>>> QueryContext qctx = QueryContext.numericRange("foo", 3, 25); > >>>>>> IndexHits<Node> hits = exactIndex.query(qctx); > >>>>>> Iterator<Node> it = hits.iterator(); > >>>>>> while (it.hasNext()) { > >>>>>> Node n = it.next(); > >>>>>> System.out.println("Found foo in exact: "+n+": > >>>>>> "+n.getProperty("foo")); > >>>>>> } > >>>>>> assertEquals(2, hits.size()); > >>>>>> > >>>>>> //Search fulltext > >>>>>> qctx = QueryContext.numericRange("foo", 3, 25); > >>>>>> hits = fulltextIndex.query(qctx); > >>>>>> it = hits.iterator(); > >>>>>> while (it.hasNext()) { > >>>>>> Node n = it.next(); > >>>>>> System.out.println("Found foo in fulltext: "+n+": > >>>>>> "+n.getProperty("foo")); > >>>>>> } > >>>>>> assertEquals(2, hits.size()); > >>>>>> > >>>>>> tx.success(); > >>>>>> } finally { > >>>>>> tx.finish(); > >>>>>> } > >>>>>> > >>>>>> For the "exact" configured index the range query returns two nodes, > >>>>>> while in "fulltext" configured index I get no result. > >>>>>> > >>>>>> Is there a way to use numeric range queries with fulltext indexes? > >>>>>> > >>>>>> Thanks for any hints, > >>>>>> --- > >>>>>> balazs > >>>>>> _______________________________________________ > >>>>>> Neo4j mailing list > >>>>>> User@lists.neo4j.org > >>>>>> https://lists.neo4j.org/mailman/listinfo/user > >>>>>> > >>>>> > >>>>> > >>>>> > >>>> _______________________________________________ > >>>> Neo4j mailing list > >>>> > >>> > >> _______________________________________________ > >> 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