Author: sletellier Date: 2011-05-04 17:13:33 +0200 (Wed, 04 May 2011) New Revision: 857 Url: http://nuiton.org/repositories/revision/wikitty/857 Log: - Search on #fulltext.#all.field on search on multiextentions without field type - Like searcg also on multivalued fields - Add multivalued constants - Add test for eq, contains, like for search like ext.field, *.field, ext.field.TYPE, *.field.TYPE Added: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/AbstractSearchTest.java 2011-05-04 15:13:33 UTC (rev 857) @@ -24,12 +24,15 @@ */ package org.nuiton.wikitty.api; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Assert; +import org.junit.Assume; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.entities.ExtensionFactory; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.Wikitty; @@ -39,19 +42,27 @@ import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.search.Search; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + /** * User: couteau * Date: 05/04/11 */ public abstract class AbstractSearchTest { + protected final static Log log = LogFactory.getLog(AbstractSearchTest.class); + public static final String EXT_PRODUCT = "Product"; public static final String EXT_CATEGORY = "Category"; public static final String PRODUCT_PRICE = "price"; public static final String PRODUCT_NAME = "name"; public static final String PRODUCT_CATEGORY = "category"; + public static final String PRODUCT_COLOR = "colors"; public static final String CATEGORY_NAME = "name"; - public static final String VERSION = "1.0"; + public static final String VERSION = "3.0"; public static String W_ID =""; protected WikittyProxy proxy = new WikittyProxy(getWikittyService()); @@ -68,6 +79,7 @@ .addField(PRODUCT_PRICE, FieldType.TYPE.NUMERIC) .addField(PRODUCT_NAME, FieldType.TYPE.STRING) .addField(PRODUCT_CATEGORY, FieldType.TYPE.WIKITTY) + .addField(PRODUCT_COLOR, FieldType.TYPE.STRING).maxOccur(Integer.MAX_VALUE) .extension(); proxy.storeExtension(product); @@ -103,6 +115,10 @@ product1.setField(EXT_PRODUCT, PRODUCT_NAME, "Paint"); product1.setField(EXT_PRODUCT, PRODUCT_PRICE, 20); product1.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category1.getId()); + List<String> colors1 = new ArrayList<String>(); + colors1.add("Blue"); + colors1.add("Black"); + product1.setField(EXT_PRODUCT, PRODUCT_COLOR, colors1); proxy.store(product1); //Create product named Screwdriver, price is 3, category is category2 @@ -111,6 +127,10 @@ product2.setField(EXT_PRODUCT, PRODUCT_NAME, "Screwdriver"); product2.setField(EXT_PRODUCT, PRODUCT_PRICE, 3); product2.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category2.getId()); + List<String> colors2 = new ArrayList<String>(); + colors2.add("Red"); + colors2.add("Black"); + product2.setField(EXT_PRODUCT, PRODUCT_COLOR, colors2); proxy.store(product2); //Create product named Paint Blue, price is 22, category is category2 @@ -119,12 +139,23 @@ product3.setField(EXT_PRODUCT, PRODUCT_NAME, "Paint Blue"); product3.setField(EXT_PRODUCT, PRODUCT_PRICE, 22); product3.setField(EXT_PRODUCT, PRODUCT_CATEGORY, category2.getId()); + List<String> colors3 = new ArrayList<String>(); + colors3.add("Blue"); + product3.setField(EXT_PRODUCT, PRODUCT_COLOR, colors3); proxy.store(product3); W_ID = product3.getId(); } + protected void assumeNotYetImplementedInMemory() { + boolean isInMomory = this instanceof InMemorySearchTest; + if (isInMomory) { + log.warn("Not yet implemented in memory, skipping"); + } + Assume.assumeTrue(!isInMomory); + } + @Test public void testEq() throws Exception { @@ -298,7 +329,7 @@ @Test public void testIn() throws Exception { - Search query = Search.query().in("Product.price","1","2","3","4","5"); + Search query = Search.query().in("Product.price", "1", "2", "3", "4", "5"); Criteria inCriteria = query.criteria(); @@ -368,9 +399,12 @@ Assert.assertEquals(4, results.getAll().size()); } - @Ignore @Test public void testUnlike() throws Exception { + + // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming + assumeNotYetImplementedInMemory(); + Search query = Search.query().unlike("Product.name", "*dri*"); Criteria likeCriteria = query.criteria(); @@ -380,9 +414,12 @@ Assert.assertEquals(4, results.getAll().size()); } - @Ignore @Test public void testLike() throws Exception { + + // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming + assumeNotYetImplementedInMemory(); + Search query = Search.query().like("Product.name", "*dri*"); Criteria likeCriteria = query.criteria(); @@ -602,6 +639,103 @@ Assert.assertEquals(0, results.getAll().size()); } + + /** + * <li> monext.monfield + * <li> *.monfield + * <li> monext.monfield.NUMERIC + * <li> *.monfield.NUMERIC + **/ + @Test + public void testSearchAllEquals() { + // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming + assumeNotYetImplementedInMemory(); + { + Criteria criteria = Search.query().eq("Category.name", "Hardware").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().eq("*.name", "Hardware").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().eq("Category.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().eq("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Hardware").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + } + + /** + * <li> monext.monfield + * <li> *.monfield + * <li> monext.monfield.NUMERIC + * <li> *.monfield.NUMERIC + **/ + @Test + public void testSearchAllContains() { + // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming + assumeNotYetImplementedInMemory(); + { + Criteria criteria = Search.query().contains("Product.colors", "Red").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().contains("*.colors", "Red").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().contains("Product.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().contains("*.colors" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "Red").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + } + + /** + * <li> monext.monfield + * <li> *.monfield + * <li> monext.monfield.NUMERIC + * <li> *.monfield.NUMERIC + **/ + @Test + public void testSearchAllLike() { + // FIXME sletellier 20110504 : Not yet implemented inMemorySearchTest, assuming + assumeNotYetImplementedInMemory(); + { + Criteria criteria = Search.query().like("Product.name", "*Blue").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().like("*.name", "*Blue").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().like("Product.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + { + Criteria criteria = Search.query().like("*.name" + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + FieldType.TYPE.STRING, "*Blue").criteria(); + PagedResult<Wikitty> pagedResult = proxy.findAllByCriteria(criteria); + assertEquals(1, pagedResult.size()); + } + } + @Test public void testComplexQueries() throws Exception { //TODO JC-07-04-2011 Write test Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-04 15:13:33 UTC (rev 857) @@ -112,7 +112,7 @@ } else { log.error("Search on multi extentions (*) without field type, fallback search in fulltext"); result = SOLR_DEFAULT_FIELD - + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; + + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + result; } } else { result = extName + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-05-04 15:13:33 UTC (rev 857) @@ -408,6 +408,17 @@ element2solr += WikittySolrConstant.SUFFIX_STRING_LOWERCASE; break; } + } else if (element2solr.endsWith(WikittySolrConstant.SUFFIX_STRING_MULTIVALUED)) { // is multivalued string + // Remove _s*m* + element2solr = element2solr.substring(0, element2solr.length() - 1); + switch (searchAs) { + case AsText: + element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT_MULTIVALUED; + break; + case ToLowerCase: + element2solr += WikittySolrConstant.SUFFIX_STRING_FULLTEXT_LOWERCASE; + break; + } } // Warning if you need add searchAs, AsText and ToLowerCase need search // at lowercase Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-05-04 15:13:33 UTC (rev 857) @@ -95,4 +95,6 @@ static final public String SUFFIX_STRING_LOWERCASE = "_c"; static final public String SUFFIX_STRING_FULLTEXT = "_t"; + public static final String SUFFIX_STRING_FULLTEXT_LOWERCASE = "_cm"; + public static final String SUFFIX_STRING_FULLTEXT_MULTIVALUED = "_tm"; } Added: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java (rev 0) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch3Test.java 2011-05-04 15:13:33 UTC (rev 857) @@ -0,0 +1,34 @@ +package org.nuiton.wikitty.storage.solr; + +import org.junit.BeforeClass; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.api.AbstractSearchTest; + +/** + * @author sletellier + */ +public class SolrSearch3Test extends AbstractSearchTest { + + WikittyService service; + + static protected ApplicationConfig config = WikittyConfig.getConfig("wikitty-config-sample-server.properties"); + + @BeforeClass + public static void initTests() { + SolrTestHelper.initTests(config); + } + + @Override + public WikittyService getWikittyService() { + + if (service == null) { + service = new WikittyServiceSolr(config); + } + + service.clear(null); + + return service; + } +} \ No newline at end of file Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2011-05-04 15:13:33 UTC (rev 857) @@ -28,14 +28,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import com.arjuna.ats.internal.jdbc.drivers.modifiers.list; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Collections; import java.util.List; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -43,7 +40,7 @@ import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.nuiton.util.CollectionUtil; +import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.FacetTopic; import org.nuiton.wikitty.search.PagedResult; Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java 2011-05-04 10:12:53 UTC (rev 856) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrTestHelper.java 2011-05-04 15:13:33 UTC (rev 857) @@ -28,7 +28,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; -import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyConfigOption; /**