Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
ymamakis committed Dec 16, 2013
2 parents abec995 + 8802602 commit e5e7118
Show file tree
Hide file tree
Showing 13 changed files with 461 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ public interface BriefBean extends IdBean {
*/
String[] getDctermsSpatial();

/**
*
* @return edm:isShownAt
*/
String[] getEdmIsShownAt(); // provider_aggregation_edm_isShownAt

// Ranking and Enrichment terms

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

package eu.europeana.corelib.definitions.solr.model;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
Expand Down Expand Up @@ -66,6 +68,7 @@ public class Query implements Cloneable {
private Map<String, String> parameters = new HashMap<String, String>();

private String queryType;
private String executedQuery;

private List<String> searchRefinements;
private List<String> facetRefinements;
Expand Down Expand Up @@ -324,6 +327,19 @@ public void setFacet(Facet facet) {
facets[0] = facet;
}

public String getExecutedQuery() {
return executedQuery;
}

public void setExecutedQuery(String executedQuery) {
try {
this.executedQuery = URLDecoder.decode(executedQuery, "UTF-8");
} catch (UnsupportedEncodingException e) {
this.executedQuery = executedQuery;
e.printStackTrace();
}
}

public void divideRefinements() {
searchRefinements = new ArrayList<String>();
facetRefinements = new ArrayList<String>();
Expand Down Expand Up @@ -391,7 +407,6 @@ private class FacetCollector {
private List<String> values = new ArrayList<String>();
private List<String> replacedValues = new ArrayList<String>();
private boolean isApiQuery = false;
private boolean hasORedQuery = false;
private boolean replaced = false;

public FacetCollector(String name) {
Expand All @@ -404,11 +419,6 @@ public FacetCollector(String name, boolean isApiQuery) {
this.isApiQuery = isApiQuery;
}

public FacetCollector(String name, boolean isApiQuery, boolean replaced) {
this(name, isApiQuery);
this.replaced = replaced;
}

public boolean isTagged() {
return isTagged;
}
Expand All @@ -417,42 +427,23 @@ public void setTagged(boolean isTagged) {
this.isTagged = isTagged;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void setTagName(String tagName) {
this.tagName = tagName;
}

public List<String> getValues() {
return values;
}

public void setValues(List<String> values) {
this.values = values;
}

private boolean isAlreadyQuoted(String value) {
return value.startsWith("\"") && value.endsWith("\"");
}

private boolean isORed(String value) {
private boolean hasOr(String value) {
return value.startsWith("(") && value.endsWith(")") && value.contains(" OR ");
}

public void addValue(String value, boolean isReplaced) {
if (name.equals(Facet.RIGHTS.name())) {
if (isORed(value)) {
this.hasORedQuery = true;
}
if (value.endsWith("*")) {
value = value.replace(":", "\\:").replace("/", "\\/");
} else if (!isAlreadyQuoted(value) && !isORed(value)) {
} else if (!isAlreadyQuoted(value) && !hasOr(value)) {
value = '"' + value + '"';
}
} else if (name.equals(Facet.TYPE.name())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,75 @@

import org.apache.commons.lang.StringUtils;

/**
* Helper class to build Solr query facets
*/
public class QueryFacet {

private String id;
private String ex;
/**
* Identifier of the query (the {!id=} part)
*/
private String identifier;

/**
* What other queries to exclude from this query (the {!ex=} part)
*/
private String exclusion;

/**
* The Solr query
*/
private String query;

/**
* Create a Query facet with a Solr query
* @param query
* The solr query to run
*/
public QueryFacet(String query) {
this.query = query;
}

public QueryFacet(String query, String id) {
/**
* Create a Query facet with a Solr query and an identifier
* @param query
* The solr query to run
* @param identifier
* Identifier of the query
*/
public QueryFacet(String query, String identifier) {
this(query);
this.id = id;
this.identifier = identifier;
}

public QueryFacet(String query, String id, String ex) {
this(query, id);
this.ex = ex;
/**
* Create a Query facet with a Solr query, an identifier and an exclusion
* @param query
* The solr query to run
* @param identifier
* Identifier of the query
* @param exclusion
* What other queries to exclude from this query
*/
public QueryFacet(String query, String identifier, String exclusion) {
this(query, identifier);
this.exclusion = exclusion;
}

public String getId() {
return id;
return identifier;
}

public void setId(String id) {
this.id = id;
this.identifier = id;
}

public String getEx() {
return ex;
public String getExclusion() {
return exclusion;
}

public void setEx(String ex) {
this.ex = ex;
public void setExclusion(String ex) {
this.exclusion = ex;
}

public String getQuery() {
Expand All @@ -48,18 +83,18 @@ public void setQuery(String query) {

public String getQueryFacetString() {
StringBuilder sb = new StringBuilder();
boolean hasId = StringUtils.isNotBlank(id);
boolean hasEx = StringUtils.isNotBlank(ex);
boolean hasId = StringUtils.isNotBlank(identifier);
boolean hasEx = StringUtils.isNotBlank(exclusion);
if (hasEx || hasId) {
sb.append("{!");
if (hasId) {
sb.append("id=").append(id);
sb.append("id=").append(identifier);
}
if (hasEx && hasId) {
sb.append(" ");
}
if (hasEx) {
sb.append("ex=").append(ex);
sb.append("ex=").append(exclusion);
}
sb.append("}");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package eu.europeana.corelib.definitions.solr.model;

public class TaggedQuery {

private String tag;
private String query;

public TaggedQuery(String tag, String query) {
super();
this.tag = tag;
this.query = query;
}

public String getTag() {
return tag;
}

public void setTag(String tag) {
this.tag = tag;
}

public String getQuery() {
return query;
}

public void setQuery(String query) {
this.query = query;
}

public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{!tag=").append(tag).append("}");
sb.append(query);
return sb.toString();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public void test() {
QueryFacet queryFacet = new QueryFacet("query AND string", "TEST:test", "REUSABILITY");
assertEquals("query AND string", queryFacet.getQuery());
assertEquals("TEST:test", queryFacet.getId());
assertEquals("REUSABILITY", queryFacet.getEx());
assertEquals("REUSABILITY", queryFacet.getExclusion());
assertEquals("{!id=TEST:test ex=REUSABILITY}query AND string", queryFacet.getQueryFacetString());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,5 @@ public void testSetFacet() {
assertTrue(facetList.contains(Facet.RIGHTS));
assertEquals(1, facetList.size());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ public class BriefBeanImpl extends IdBeanImpl implements BriefBean {
@Field("score")
protected Float score;

@Field("provider_aggregation_edm_isShownAt")
protected String[] edmIsShownAt; // provider_aggregation_edm_isShownAt

@Override
public String[] getEdmPreview(){
List<String> previews = new ArrayList<String>();
Expand Down Expand Up @@ -271,7 +274,7 @@ public String[] getEdmTimespanBegin() {

@Override
public String[] getEdmTimespanEnd() {
return (this.edmTimespan != null ? this.edmTimespanEnd.clone() : null);
return (this.edmTimespanEnd != null ? this.edmTimespanEnd.clone() : null);
}

@Override
Expand Down Expand Up @@ -303,4 +306,9 @@ public Date getTimestamp() {
public float getScore() {
return ((Float)this.score != null ? this.score : 0.0f);
}

@Override
public String[] getEdmIsShownAt() {
return (this.edmIsShownAt != null ? this.edmIsShownAt.clone() : null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ public <T extends IdBean> ResultSet<T> search(Class<T> beanInterface,

try {
log.fine("Solr query is: " + solrQuery);
query.setExecutedQuery(solrQuery.toString());
QueryResponse queryResponse = solrServer.query(solrQuery);
logTime("search", queryResponse.getElapsedTime());

Expand Down
Loading

0 comments on commit e5e7118

Please sign in to comment.