Hi Eric,

I am curious why this would b considered an anti-patern to check a stored 
valued for every matching document. Is this not what the facet query component 
is doing anyway so it can get the total counts?

Grouping doesn’t solve the issue because again, I will only see groups for the 
items returned, not all matching documents.

I am using a product that has SOLR 4.3 embedded into it, so I cannot upgrade to 
4.9 or 4.10 and take advantage of the parent/child feature added recently.

Thanks!

Darin

> On Nov 28, 2014, at 12:03 PM, Erick Erickson <erickerick...@gmail.com> wrote:
> 
> Does grouping work for you here? Because
> even if you solve this problem, if I'm reading
> this right you're going to fetch stored values
> for every doc that matches the query, which
> is an anti-pattern big-time, consider *:*....
> 
> Of course I did a very quick skim, so maybe
> I'm all wet....
> 
> Best,
> Erick
> 
> On Thu, Nov 27, 2014 at 5:28 PM, Darin Amos <dari...@gmail.com> wrote:
>> Hello,
>> 
>> I am trying to implement a Rollup Search component on a version of SOLR that 
>> exists previously to the parent/child additions, so I am trying to implement 
>> my own. The searches will be executed exclusively against the child 
>> documents, and I want to “rollup” those child documents into the parent 
>> documents.
>> 
>> The interface is going to allow the user to add the following parameters to 
>> the SOLR query:
>> 
>> &rollup=true&rollup.parentField=id&rollup.childField=parentId
>> 
>> My code so far is below. What I have works so far, except my second parent 
>> query loses the order. I would like to be able to sort my parent query by 
>> the score of the previous child search. Perhaps I would take the highest 
>> score from all children (haven’t decided yet). My problem however is that I 
>> don’t know how I can get the score from all the hits in the original search, 
>> just what is returned. If my child query gets 10,000 hits, but only return 
>> 100 records, I can’t get all the scores I need.
>> 
>> Does anyone have any recommendations?
>> 
>> Thanks!!
>> Darin
>> 
>> 
>>                        //Loop through all the records and look for the 
>> parent reference field
>>                        Set<String> parentRefs = new HashSet<String>();
>>                        DocIterator docSetIterator = 
>> rb.getResults().docSet.iterator();
>>                        while(docSetIterator.hasNext()){
>>                                int docInt = docSetIterator.next();
>>                                String fieldValues[] = 
>> rb.req.getSearcher().doc(docInt).getValues(childFieldName);
>> 
>>                                for(String fieldValue : fieldValues){
>>                                        if(fieldValue != null && 
>> fieldValue.length() > 0 && !parentRefs.contains(fieldValue)){
>>                                                parentRefs.add(fieldValue);
>>                                        }
>>                                }
>>                        }
>> 
>>                        //Build a boolean query of term queries
>>                        BooleanQuery parentQuery = new BooleanQuery();
>>                        Iterator<String> parentIdIterator = 
>> parentRefs.iterator();
>>                        while(parentIdIterator.hasNext()){
>>                                String parentId = parentIdIterator.next();
>>                                TermQuery termQuery = new TermQuery(new 
>> Term(parentFieldName, parentId));
>>                                parentQuery.add(termQuery, 
>> BooleanClause.Occur.SHOULD);
>>                        }
>> 
>> 
>>                        DocList parentList = searcher.getDocList(parentQuery, 
>> new ArrayList<Query>(), null, 0, 100, 1); //TODO: use correct 
>> start/end/flags later...
>> 
>>                        //Add parent results
>>                    ResultContext resultContext = new ResultContext();
>>                    resultContext.docs = parentList;
>>                    resultContext.query = parentQuery;
>>                    rb.rsp.add("parents", resultContext);
>>                    rb.rsp.getToLog().add("hits", parentList.matches());

Reply via email to