Hi, Niels.

Mattias just responded yesterday to me on a similar question.  See below:

Rick
======
Hi Rick,

you could probably get the keys from the IndexReader, like so:

    // I'm in LuceneIndex now
    public Iterable<String> getKeys()
    {
        IndexSearcherRef searcher = service.dataSource().getIndexSearcher(
identifier, true );
        try
        {
            IndexReader reader = searcher.getSearcher().getIndexReader();
            Collection<String> fieldNames = reader.getFieldNames( 
FieldOption.ALL );

            // Make a copy since we don't know if the result is final or not
            Collection<String> result = new ArrayList<String>( fieldNames );
            result.remove( KEY_DOC_ID );
            result.remove( KEY_START_NODE_ID );
            result.remove( KEY_END_NODE_ID );
            return result;
        }
        finally
        {
            searcher.closeStrict();
        }
    }

This is a perhaps bit crude implementation and will only work on committed 
stuff, not any transactional state. This is a start at least.

    public Iterable<String> getValues( String key )
    {
        IndexSearcherRef searcher = service.dataSource().getIndexSearcher(
identifier, true );
        try
        {
            IndexReader reader = searcher.getSearcher().getIndexReader();
            Collection<String> result = new ArrayList<String>();
            TermEnum terms = reader.terms( new Term( key ) );
            do
            {
                result.add( terms.term().text() );
            }
            while ( terms.next() );
            return result;
        }
        catch ( IOException e )
        {
            throw new RuntimeException( e );
        }
        finally
        {
            searcher.closeStrict();
        }
    }

Suffers from the same problem of transactional state and also doesn't consider 
that values could be other types, f.ex. integers where the string is a weird 
encoding of such a value.


-----Original Message-----
From: [email protected] [mailto:[email protected]] On 
Behalf Of Niels Hoogeveen
Sent: Friday, June 17, 2011 8:30 AM
To: [email protected]
Subject: [Neo4j] all values of a key-object pair





I have run into the situation where I want to add key value pairs to the Lucene 
index, where I have no need to store the value in a property, but I would like 
to know which values are stored in the Lucene index for a given key-object 
pair.  Use case: Loading Dbpedia in Neo4J, I load all entities and all 
redirects. Every entity has a unique URL, as does every redirect. URL's are 
stored in Lucene to look up the node that corresponds to an entity. I have no 
need to store redirects, neither as node nor as a String array property (one 
entity can have more than one redirect), instead I want to store the redirect 
URL in the Lucene index, pointing to the associated entity node. In certain 
cases, however, I would like to know the redirect URL's associated with a 
certain entity. So I would like to be able to retrieve the values stored in the 
Lucene index for a given key-object pair. Is this possible? If not with the 
current setup, would it be possible to add such functionality? Kind re
 gards,Niels Hoogeveen                                            
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to