r701 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/search wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2011-02-02 15:08:09 +0100 (Wed, 02 Feb 2011) New Revision: 701 Url: http://nuiton.org/repositories/revision/wikitty/701 Log: Evolution #1254: Improve contains and in methods in search (in and contains work correctly now) Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-01-31 15:25:48 UTC (rev 700) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/RestrictionHelper.java 2011-02-02 14:08:09 UTC (rev 701) @@ -49,6 +49,7 @@ import java.util.List; import java.util.Locale; import java.util.TimeZone; +import org.nuiton.wikitty.search.operators.In; /** * @author "Nicolas Chapurlat" <nicolas.chapurlat@logica.com> @@ -180,13 +181,30 @@ return contains(element, values); } - public static Contains contains(Element element, + public static Restriction contains(Element element, List<String> values) { Contains contains = new Contains(element, values); contains.setName(RestrictionName.CONTAINS); return contains; } + public static Restriction in(Element element, String value1, + String... otherValues) { + List<String> values = new LinkedList<String>(); + values.add(value1); + for (String val : otherValues) { + values.add(val); + } + return in(element, values); + } + + public static Restriction in(Element element, + List<String> values) { + In in = new In(element, values); + in.setName(RestrictionName.IN); + return in; + } + public static Restriction not(Restriction restriction) { Not not = new Not(restriction); not.setName(RestrictionName.NOT); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-01-31 15:25:48 UTC (rev 700) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/search/Search.java 2011-02-02 14:08:09 UTC (rev 701) @@ -144,7 +144,7 @@ /** * Contains. - * + * * @param element * @param values * @return @@ -162,13 +162,39 @@ * @param value * @return */ - public Search contains(String element, String value) { + public Search contains(String element, String value1, String ... values) { restrictions.add(RestrictionHelper.contains(elt(element), - value)); + value1, values)); return this; } /** + * Contains. + * + * @param element + * @param values + * @return + */ + public Search in(String element, Collection<String> values) { + restrictions.add(RestrictionHelper.in(elt(element), + new ArrayList<String>(values))); + return this; + } + + /** + * Contains. + * + * @param element + * @param value + * @return + */ + public Search in(String element, String value1, String ... values) { + restrictions.add(RestrictionHelper.in(elt(element), + value1, values)); + return this; + } + + /** * Equals. * * @param element Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-01-31 15:25:48 UTC (rev 700) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-02-02 14:08:09 UTC (rev 701) @@ -175,14 +175,27 @@ // FIXME poussin 20101220 i think this method return bad lucene syntaxe query // I think the syntaxe must be the same as contains private String in2solr(In in) { - boolean first = true; - String result = in.getElement().getName() + ":["; - for( String value : in.getValue() ) { - if ( !first ) { result += ", "; first = false; } - result += value; + if (in.getElement() == null) { + throw new WikittyException("in.element must not be null"); } - result +="]"; - return result; + if (in.getValue() == null) { + throw new WikittyException("in.values must not be null"); + } + if (in.getValue().size() < 1) { + throw new WikittyException("IN is an operator that handle 1 operand at least"); + } + + String operand = ""; + StringBuilder result = new StringBuilder(); + result.append(element2solr(in.getElement())).append(':'); + result.append('('); + for (String value : in.getValue()) { + result.append(operand); + result.append(value2solr(value)); + operand = " OR "; + } + result.append(')'); + return result.toString(); } private String associated2solr(AssociatedRestriction associated, SolrServer solr) throws WikittyException { @@ -356,13 +369,13 @@ private String between2solr(Between between) throws WikittyException { if (between.getElement() == null) { - throw new WikittyException("contains.element"); + throw new WikittyException("between.element must not be null"); } if (between.getMin() == null) { - throw new WikittyException("contains.min"); + throw new WikittyException("between.min must not be null"); } if (between.getMax() == null) { - throw new WikittyException("contains.max"); + throw new WikittyException("between.max must not be null"); } return element2solr(between.getElement()) + ":[" + value2solr(between.getMin()) + " TO " @@ -372,10 +385,10 @@ private String contains2solr(Contains contains) throws WikittyException { if (contains.getElement() == null) { - throw new WikittyException("contains.element"); + throw new WikittyException("contains.element must not be null"); } if (contains.getValue() == null) { - throw new WikittyException("contains.values"); + throw new WikittyException("contains.values must not be null"); } if (contains.getValue().size() < 1) { throw new WikittyException("CONTAINS is an operator that handle 1 operand at least"); @@ -388,7 +401,7 @@ for (String value : contains.getValue()) { result.append(operand); result.append(value2solr(value)); - operand = " OR "; + operand = " AND "; } result.append(')'); return result.toString(); Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-01-31 15:25:48 UTC (rev 700) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-02-02 14:08:09 UTC (rev 701) @@ -35,7 +35,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.FacetTopic; @@ -49,7 +48,6 @@ import org.nuiton.wikitty.entities.WikittyGroup; import org.nuiton.wikitty.entities.WikittyGroupImpl; import org.nuiton.wikitty.search.operators.Element; -import org.nuiton.wikitty.search.operators.Like; import org.nuiton.wikitty.search.operators.Like.SearchAs; import org.nuiton.wikitty.search.RestrictionHelper; import org.nuiton.wikitty.search.Search; @@ -175,6 +173,59 @@ } @Test + public void testContainsSearch() throws Exception { + { + Criteria criteria = Search.query() + .contains("Product.price", "20") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + PagedResult<String> result = ws.findAllByCriteria(null, criteria); + List<String> list = result.getAll(); + assertEquals(3, list.size()); + } + { + Criteria criteria = Search.query() + .contains("Product.price", "20", "30", "35") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + PagedResult<String> result = ws.findAllByCriteria(null, criteria); + List<String> list = result.getAll(); + assertEquals(0, list.size()); + } + } + + @Test + public void testInSearch() throws Exception { + { + Criteria criteria = Search.query() + .in("Product.price", "20") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + PagedResult<String> result = ws.findAllByCriteria(null, criteria); + List<String> list = result.getAll(); + assertEquals(3, list.size()); + } + { + Criteria criteria = Search.query() + .in("Product.price", "20", "30", "35") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + PagedResult<String> result = ws.findAllByCriteria(null, criteria); + List<String> list = result.getAll(); + assertEquals(4, list.size()); + } + { + Criteria criteria = Search.query() + .in("Product.price", "25", "30", "40") + .criteria() + .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS); + PagedResult<String> result = ws.findAllByCriteria(null, criteria); + List<String> list = result.getAll(); + assertEquals(0, list.size()); + } + } + + @Test public void testAdvancedSearch() throws Exception { Criteria criteria = Search.query() .eq("Product.value", "1")
participants (1)
-
bpoussin@users.nuiton.org