Greetings!

First off, I realize Lucene is a search engine and therefore does not possess many of the features of a database. That being said, I have encountered a particular use case where I need to lookup potentially thousands of records in a Lucene index based upon an ID (a String field in the index). This data also needs be sorted based upon any chosen field in the index. In pseudo code, this is how its currently done:

String[] ids = { "123aeeff", "34eacc", ...}

results.clear();
StringBuffer lookupQuery = new StringBuffer()
for (int i=0; i<ids.size();i++) {
       lookupQuery.append(ids.get(i))
       lookupQuery.append(" ")
        if ((i+1) % 1024 == 0) {
            search(lookupQuery.toString())
             lookupQuery = new StringBuffer()
       }
 }
if (lookupQuery.length()>0) {
        search(lookupQuery.toString())
}

As you can see, in a loop, Lucene queries are constructed into a maximum of 1024 terms, for example, consisting of IDS "123aeeff 34eacc ..". After each query in the loop is constructed, a search is executed and then the results are combined into a single linkedlist (this is done in the search function). This works well aside from two outstanding questions:

1. Is executing separate search queries, the best way to lookup
   thousands of records in an index? Is there a more efficient way to
   lookup thousands of records based upon ID?
2. The results are unsorted after they are combined into a single
   linkedlist. What is the best way to sort the combined results based
   upon any chosen field in the lucene index? Is there a way to do that
   would leverage Lucene's inbuilt sort abilities?

Many thanks for your consideration

Jamie

Reply via email to