Hi Shawn, This is time consuming operation. I already have this in my application . I was pondering whether I can get bit set from both the solr indexes , bitset.and then retrieve only those matched? I don't know how do I retrieve bitset. - wanted to try this and test the performance.
Regards Michael On Sun, Oct 13, 2013 at 8:54 PM, Shawn Heisey <s...@elyograg.org> wrote: > On 10/13/2013 8:34 AM, Michael Tyler wrote: > > Hello, > > > > I have 2 different solr indexes returning 2 different sets of > > SolrDocumentList. Doc Id is the foreign key relation. > > > > After obtaining them, I want to perform "AND" operation between them and > > then return results to user. Can you tell me how do I get this? I am > using > > solr 4.3 > > > > SolrDocumentList results1 = responseA.getResults(); > > SolrDocumentList results2 = responseB.getResults(); > > > > results1 : d1, d2, d3 > > results2 : d1,d2, d4 > > The SolrDocumentList class extends ArrayList<SolrDocument>, which means > that it inherits all ArrayList functionality. Unfortunately, there's no > built-in way of eliminating duplicates with a java List. It's very easy > to combine the two results into another object, but that object will > contain both of the d1 and both of the d2 SolrDocument objects. > > The following code is a reasonably fast way to handle this. It assumes > that results1 is the list that should win when there are duplicates, so > it gets added first. It assumes that the uniqueKey field is named "id" > and that it contains a String value. If these are incorrect > assumptions, you can adjust the code accordingly. > > SolrDocumentList results1 = responseA.getResults(); > SolrDocumentList results2 = responseB.getResults(); > List<SolrDocumentList> tmpList = new ArrayList<SolrDocumentList>(); > tmpList.add(results1); > tmpList.add(results2); > > Set<String> tmpSet = new HashSet<String>(); > SolrDocumentList newList = new SolrDocumentList(); > for (SolrDocumentList l : tmpList) > { > for (SolrDocument d : l) > { > String id = (String) d.get("id"); > if (tmpSet.contains(id)) { > continue; > } > tmpSet.add(id); > newList.add(d); > } > } > > Thanks, > Shawn > >