r1269 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/query wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2011-12-30 16:43:37 +0100 (Fri, 30 Dec 2011) New Revision: 1269 Url: http://nuiton.org/repositories/revision/wikitty/1269 Log: Evolution #1863: Create new query api with visitor and better implementation Evolution #1864: Add query langage syntaxe - Utilisation de constantes pour ElementId et ElementExtension dans Element - Prise en compte des facets sur les extensions Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementField.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQuery.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -68,7 +68,11 @@ protected List<FacetQuery> facetQuery; /** Facet on field. */ protected List<ElementField> facetField; - /** if true facet is done on extension name */ + /** + * if true facet is done on extension name. Extention facet can be found + * in {@link WikittyQueryResult#getFacets()} with key + * {@link Element.EXTENSION.getValue()} + */ protected boolean facetExtension = false; /** Sort ascending on fields. */ Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -11,7 +11,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyUtil; -import org.nuiton.wikitty.entities.BusinessEntity; import org.nuiton.wikitty.entities.BusinessEntityImpl; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.Wikitty; @@ -380,7 +379,7 @@ * @see {@link Equals} */ public WikittyQueryMaker exteq(String extensionName) { - return eq(new ElementExtension(), extensionName); + return eq(Element.EXTENSION, extensionName); } /** @@ -393,7 +392,7 @@ * @see {@link Equals} */ public WikittyQueryMaker ideq(Object idOrWikitty) { - return eq(new ElementId(), idOrWikitty); + return eq(Element.ID, idOrWikitty); } /** @@ -406,7 +405,7 @@ * @see {@link ContainsAll} */ public WikittyQueryMaker extContainsAll(Collection<String> extensionNames) { - return containsAll(new ElementExtension(), extensionNames); + return containsAll(Element.EXTENSION, extensionNames); } /** @@ -416,7 +415,7 @@ List<String> l = new LinkedList<String>(); l.add(ext1); l.addAll(Arrays.asList(exts)); - return containsAll(new ElementExtension(), l); + return containsAll(Element.EXTENSION, l); } /** @@ -454,7 +453,7 @@ * @see {@link NotEquals} */ public WikittyQueryMaker extneq(String extensionName) { - return ne(new ElementExtension(), extensionName); + return ne(Element.EXTENSION, extensionName); } /** @@ -467,7 +466,7 @@ * @see {@link NotEquals} */ public WikittyQueryMaker idneq(Object idOrWikitty) { - return ne(new ElementId(), idOrWikitty); + return ne(Element.ID, idOrWikitty); } /** Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -1,6 +1,5 @@ package org.nuiton.wikitty.query; -import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -57,11 +56,16 @@ */ @BuildParseTree public class WikittyQueryParser extends BaseParser<Object> { + /** + * type de champs pour indique qu'on fait une condition sur le nom + * d'une extension. Ce champs est aussi utilise comme valeur pour + * {@link ElementExtension} et comme nom de facet pour les extensions + */ public static final String EXTENSION = "extension"; public static final String FALSE = "FALSE"; public static final String ID = "id"; - public static final String JOIN = "<-"; + public static final String JOIN = "IN"; public static final String LITERAL_CLOSE = "\""; public static final String LITERAL_OPEN = "\""; public static final String NULL = "NULL"; @@ -124,9 +128,9 @@ protected Element toElement(String v) { Element result; if (ID.equals(v)) { - result = new ElementId(); + result = Element.ID; } else if (EXTENSION.equals(v)) { - result = new ElementExtension(); + result = Element.EXTENSION; } else { result = new ElementField(v); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -64,6 +64,7 @@ @Override public boolean visitEnter(WikittyQuery o) { WikittyQuery q = getQuery(); + q.setFacetExtension(q.isFacetExtension()); q.setFacetField(new ArrayList<ElementField>(o.getFacetField())); q.setFacetLimit(o.getFacetLimit()); q.setFacetMinCount(o.getFacetMinCount()); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/Element.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -2,6 +2,7 @@ import java.io.Serializable; import org.apache.commons.lang.ObjectUtils; +import org.nuiton.wikitty.WikittyUtil; /** * Class mere qui determine sur quoi porte une condition. Les classes filles @@ -20,6 +21,11 @@ // serialVersionUID is used for serialization. private static final long serialVersionUID = 1L; + public static final ElementId ID = new ElementId(); + public static final ElementExtension EXTENSION = new ElementExtension(); + public static final ElementField ALL_FIELD = + new ElementField("*" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + "*"); + protected String value; public Element() { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementExtension.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -5,7 +5,8 @@ import org.nuiton.wikitty.query.WikittyQueryParser; /** - * Un element qui represente les extensions + * Un element qui represente les extensions, vous devez utiliser l'instance + * {@link Element#EXTENSION} * * @author poussin * @version $Revision$ @@ -21,7 +22,7 @@ private static final long serialVersionUID = 1L; - public ElementExtension() { + protected ElementExtension() { super(WikittyQueryParser.EXTENSION); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementField.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementField.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementField.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -2,7 +2,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.wikitty.WikittyUtil; /** * Element qui porte sur un champs. Le champs doit-ete de la forme @@ -24,9 +23,6 @@ private static final long serialVersionUID = 1L; - static final public ElementField ALL_FIELD = - new ElementField("*" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + "*"); - public ElementField(String value) { super(value); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/ElementId.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -5,7 +5,8 @@ import org.nuiton.wikitty.query.WikittyQueryParser; /** - * Element qui represente l'Id + * Element qui represente l'Id, vous devez utiliser l'instance + * {@link Element#ID} * * @author poussin * @version $Revision$ @@ -21,7 +22,7 @@ private static final long serialVersionUID = 1L; - public ElementId() { + protected ElementId() { super(WikittyQueryParser.ID); } Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/ElementModifier.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -183,7 +183,7 @@ + "|(" + SUFFIX_SORTABLE + "$)" , ""); if (SOLR_EXTENSIONS.equals(fieldName)) { - fieldName = new ElementExtension().getValue(); + fieldName = Element.EXTENSION.getValue(); } return fieldName; } Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-12-30 15:12:58 UTC (rev 1268) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-12-30 15:43:37 UTC (rev 1269) @@ -60,6 +60,7 @@ import org.nuiton.wikitty.services.WikittyTransaction; import java.io.File; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.nuiton.util.ApplicationConfig; import org.nuiton.util.TimeLog; @@ -709,18 +710,24 @@ } // Add faceting + boolean isFacetExtension = query.isFacetExtension(); List<ElementField> facetField = query.getFacetField(); List<FacetQuery> facetQuery = query.getFacetQuery(); // use to map query string to criteria facet name Map<String, String> facetQueryToName = new HashMap<String, String>(); - if ((facetField != null && !facetField.isEmpty()) - || (facetQuery != null && !facetQuery.isEmpty())) { + if (isFacetExtension + || CollectionUtils.isNotEmpty(facetField) + || CollectionUtils.isNotEmpty(facetQuery)) { querySolr.setFacet(true); querySolr.setFacetMinCount(query.getFacetMinCount()); querySolr.setFacetLimit(query.getFacetLimit()); + if (isFacetExtension) { + querySolr.addFacetField(WikittySolrConstant.SOLR_EXTENSIONS); + } + // field facetisation if (facetField != null) { for (ElementField fqfieldName : facetField) { @@ -746,7 +753,10 @@ SolrDocumentList solrResults = resp.getResults(); Map<String, List<FacetTopic>> facets = new HashMap<String, List<FacetTopic>>(); - if (facetField != null && !facetField.isEmpty()) { + + // la facet sur les extensions est directement et convenablement + // gere comme un champs + if (CollectionUtils.isNotEmpty(facetField)) { for (FacetField facet : resp.getFacetFields()) { String facetName = elementModifier.convertToField(facet.getName()); List<FacetTopic> topics = new ArrayList<FacetTopic>(); @@ -761,7 +771,8 @@ facets.put(facetName, topics); } } - if (facetQuery != null && !facetQuery.isEmpty()) { + + if (CollectionUtils.isNotEmpty(facetQuery)) { for (Map.Entry<String, Integer> facet : resp.getFacetQuery().entrySet()) { String facetName = facet.getKey(); // don't use contains because, map can have key with null value
participants (1)
-
bpoussin@users.nuiton.org