Skip to content

Commit

Permalink
added selection parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
John Wang committed Aug 8, 2010
1 parent b899f8d commit 69c3cfd
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 6 deletions.
@@ -1,5 +1,6 @@
package com.browseengine.bobo.server.protocol;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
Expand Down Expand Up @@ -30,7 +31,7 @@ public class BoboRequestBuilder {
public static final Logger logger = Logger.getLogger(BoboRequestBuilder.class);

private static void fillBoboSelections(BrowseRequest req,SolrParams params){
Iterator<String> names=params.getParameterNamesIterator();
/*Iterator<String> names=params.getParameterNamesIterator();
HashMap<String,BrowseSelection> selMap=new HashMap<String,BrowseSelection>();
while(names.hasNext()){
Expand Down Expand Up @@ -102,7 +103,34 @@ else if ("strict".equals(type)){
Iterator<BrowseSelection> iter=selMap.values().iterator();
while(iter.hasNext()){
req.addSelection(iter.next());
}
}*/

String[] facetQueries = params.getParams(FacetParams.FACET_QUERY);
if (facetQueries!=null && facetQueries.length!=0) {
HashMap<String,BrowseSelection> selMap = new HashMap<String,BrowseSelection>();
for (String facetQuery : facetQueries){
String[] parts = facetQuery.split(":");
String name = parts[0];
String valval = parts[1];
String[] vals = valval.split(",");
if (vals.length>0){
BrowseSelection sel = selMap.get(name);
if (sel==null){
sel = new BrowseSelection(name);
selMap.put(name, sel);
}
for (String val : vals){
sel.addValue(val);
}
}
}
if (selMap.size()>0){
Collection<BrowseSelection> sels = selMap.values();
for (BrowseSelection sel : sels){
req.addSelection(sel);
}
}
}
}

private static HashSet<String> UnsupportedSolrFacetParams = new HashSet<String>();
Expand Down
Expand Up @@ -28,6 +28,7 @@ public static void main(String[] args) throws Exception{
query.setFields("color,score");
query.setStart(0);
query.setRows(10);
//query.setFilterQueries("contents:cool");

QueryResponse res = solrSvr.query(query);

Expand Down
43 changes: 39 additions & 4 deletions bobo-solr/src/com/browseengine/solr/BoboFacetComponent.java
@@ -1,6 +1,7 @@
package com.browseengine.solr;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand All @@ -9,9 +10,15 @@
import java.util.concurrent.Executors;

import org.apache.log4j.Logger;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.Weight;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
Expand Down Expand Up @@ -40,6 +47,7 @@
import com.browseengine.bobo.api.BrowseResult;
import com.browseengine.bobo.api.FacetAccessible;
import com.browseengine.bobo.server.protocol.BoboRequestBuilder;
import com.kamikaze.docidset.impl.AndDocIdSet;

public class BoboFacetComponent extends SearchComponent {

Expand Down Expand Up @@ -135,7 +143,7 @@ public void process(ResponseBuilder rb) throws IOException {
rb.setSortSpec( parser.getSort(true) );
rb.setQparser(parser);

/*

String[] fqs = params.getParams(CommonParams.FQ);
if (fqs!=null && fqs.length!=0) {
List<Query> filters = rb.getFilters();
Expand All @@ -145,12 +153,11 @@ public void process(ResponseBuilder rb) throws IOException {
}
for (String fq : fqs) {
if (fq != null && fq.trim().length()!=0) {
QParser fqp = QParser.getParser(fq, null, req);
QParser fqp = QParser.getParser(fq, null, rb.req);
filters.add(fqp.getQuery());
}
}
}*/

}
} catch (ParseException e) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
}
Expand All @@ -170,13 +177,41 @@ public void process(ResponseBuilder rb) throws IOException {
BrowseResult res = null;
if (shardsVal == null && !solrParams.getBool(ShardParams.IS_SHARD, false))
{

SolrIndexSearcher searcher=rb.req.getSearcher();

SolrIndexReader solrReader = searcher.getReader();
BoboIndexReader reader = (BoboIndexReader)solrReader.getWrappedReader();

if (reader instanceof BoboIndexReader){
try {
List<Query> filters = rb.getFilters();
if (filters!=null){
final ArrayList<DocIdSet> docsets = new ArrayList<DocIdSet>(filters.size());
for (Query filter : filters){
Weight weight = filter.createWeight(rb.req.getSearcher());
final Scorer scorer = weight.scorer(reader, false, true);
docsets.add(new DocIdSet(){
@Override
public DocIdSetIterator iterator() throws IOException {
return scorer;
}

});
}

if (docsets.size()>0){
br.setFilter(
new Filter(){
@Override
public DocIdSet getDocIdSet(IndexReader reader)
throws IOException {
return new AndDocIdSet(docsets);
}
});
}
}

BoboBrowser browser = new BoboBrowser(reader);

res=browser.browse(br);
Expand Down

0 comments on commit 69c3cfd

Please sign in to comment.