Modified: incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/impl/queryencoders/WildcardEncoder.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/impl/queryencoders/WildcardEncoder.java?rev=1089443&r1=1089442&r2=1089443&view=diff ============================================================================== --- incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/impl/queryencoders/WildcardEncoder.java (original) +++ incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/impl/queryencoders/WildcardEncoder.java Wed Apr 6 13:14:26 2011 @@ -18,34 +18,43 @@ package org.apache.stanbol.entityhub.yar import java.util.Arrays; import java.util.Collection; - +import java.util.Collections; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Set; + +import org.apache.stanbol.entityhub.yard.solr.defaults.IndexDataTypeEnum; +import org.apache.stanbol.entityhub.yard.solr.model.IndexDataType; +import org.apache.stanbol.entityhub.yard.solr.model.IndexValue; import org.apache.stanbol.entityhub.yard.solr.query.ConstraintTypePosition; import org.apache.stanbol.entityhub.yard.solr.query.EncodedConstraintParts; import org.apache.stanbol.entityhub.yard.solr.query.IndexConstraintTypeEncoder; import org.apache.stanbol.entityhub.yard.solr.query.IndexConstraintTypeEnum; import org.apache.stanbol.entityhub.yard.solr.query.ConstraintTypePosition.PositionType; +import org.apache.stanbol.entityhub.yard.solr.utils.SolrUtil; -public class WildcardEncoder implements IndexConstraintTypeEncoder<String>{ +public class WildcardEncoder implements IndexConstraintTypeEncoder<IndexValue>{ private static final ConstraintTypePosition POS = new ConstraintTypePosition(PositionType.value); + + private static final Set<IndexDataType> SUPPORTED_TYPES; + static { + Set<IndexDataType> types = new HashSet<IndexDataType>(); + types.add(IndexDataTypeEnum.TXT.getIndexType()); + types.add(IndexDataTypeEnum.STR.getIndexType()); + SUPPORTED_TYPES = Collections.unmodifiableSet(types); + } @Override - public void encode(EncodedConstraintParts constraint, String value) { + public void encode(EncodedConstraintParts constraint, IndexValue value) { if(value == null){ throw new IllegalArgumentException("This encoder does not support the NULL IndexValue!"); + } else if(!SUPPORTED_TYPES.contains(value.getType())){ + throw new IllegalArgumentException(String.format("This encoder does not support the IndexDataType %s (supported: %s)", + value.getType(),SUPPORTED_TYPES)); } else { - //TODO: Use toLoverCase here, because I had problems with Solr that - // Queries where not converted to lower case even that the - // LowerCaseFilterFactory was present in the query analyser :( - value = value.toLowerCase(); - /* NOTE: - * When searching for multiple words we assume that we need to find - * the exact pattern e.g. "best pract*" because of that we replace - * spaces with '+' - */ - value = value.replace(' ', '+'); - constraint.addEncoded(POS, value); + constraint.addEncoded(POS, SolrUtil.encodeQueryValue(value)); } } @@ -65,8 +74,8 @@ public class WildcardEncoder implements } @Override - public Class<String> acceptsValueType() { - return String.class; + public Class<IndexValue> acceptsValueType() { + return IndexValue.class; } }
Modified: incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/EncodedConstraintParts.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/EncodedConstraintParts.java?rev=1089443&r1=1089442&r2=1089443&view=diff ============================================================================== --- incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/EncodedConstraintParts.java (original) +++ incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/query/EncodedConstraintParts.java Wed Apr 6 13:14:26 2011 @@ -49,11 +49,11 @@ import java.util.Map.Entry; * @author Rupert Westenthaler * */ -public class EncodedConstraintParts implements Iterable<Entry<ConstraintTypePosition,Set<String>>>{ +public class EncodedConstraintParts implements Iterable<Entry<ConstraintTypePosition,Set<Set<String>>>>{ /** * This maps contains all the encoded parts of the query. */ - private SortedMap<ConstraintTypePosition,Set<String>> constraintMap = new TreeMap<ConstraintTypePosition, Set<String>>(); + private SortedMap<ConstraintTypePosition,Set<Set<String>>> constraintMap = new TreeMap<ConstraintTypePosition, Set<Set<String>>>(); /** * Adds an constraint type * @param pos @@ -63,12 +63,12 @@ public class EncodedConstraintParts impl if(values == null || values.length<1){ return; } else { - Set<String> constraints = constraintMap.get(pos); + Set<Set<String>> constraints = constraintMap.get(pos); if(constraints == null){ - constraints = new HashSet<String>(); + constraints = new HashSet<Set<String>>(); constraintMap.put(pos, constraints); } - constraints.addAll(Arrays.asList(values)); + constraints.add(new HashSet<String>(Arrays.asList(values))); } } @@ -78,7 +78,7 @@ public class EncodedConstraintParts impl } @Override - public Iterator<Entry<ConstraintTypePosition, Set<String>>> iterator() { + public Iterator<Entry<ConstraintTypePosition, Set<Set<String>>>> iterator() { return constraintMap.entrySet().iterator(); } @Override Modified: incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/utils/SolrUtil.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/utils/SolrUtil.java?rev=1089443&r1=1089442&r2=1089443&view=diff ============================================================================== --- incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/utils/SolrUtil.java (original) +++ incubator/stanbol/trunk/entityhub/yard/solr/src/main/java/org/apache/stanbol/entityhub/yard/solr/utils/SolrUtil.java Wed Apr 6 13:14:26 2011 @@ -18,6 +18,9 @@ package org.apache.stanbol.entityhub.yar import java.util.regex.Pattern; +import org.apache.stanbol.entityhub.yard.solr.defaults.IndexDataTypeEnum; +import org.apache.stanbol.entityhub.yard.solr.model.IndexValue; + public final class SolrUtil { private SolrUtil(){} @@ -36,5 +39,35 @@ public final class SolrUtil { public static String escapeSolrSpecialChars(String string) { return string != null?LUCENE_PATTERN.matcher(string).replaceAll(REPLACEMENT_STRING):null; } + /** + * This method encodes a parsed index value as needed for queries.<p> + * In case of TXT it is assumed that a whitespace tokenizer is used + * by the index. Therefore values with multiple words need to be + * treated and connected with AND to find only values that contain all. + * In case of STR no whitespace is assumed. Therefore spaces need to + * be replaced with '+' to search for tokens with the exact name. + * In all other cases the string need not to be converted. + * + * Note also that text queries are converted to lower case + * @param value the index value + * @return the (possible multiple) values that need to be connected with AND + */ + public static String[] encodeQueryValue(IndexValue indexValue){ + if(indexValue == null){ + return null; + } + String[] queryConstraints; + String escapedValue = SolrUtil.escapeSolrSpecialChars(indexValue.getValue()); + if(IndexDataTypeEnum.TXT.getIndexType().equals(indexValue.getType())){ + escapedValue = escapedValue.toLowerCase(); + queryConstraints = escapedValue.split(" "); + } else if(IndexDataTypeEnum.STR.equals(indexValue.getType())){ + escapedValue = escapedValue.toLowerCase(); + queryConstraints = new String[]{escapedValue.replace(' ', '+')}; + } else { + queryConstraints = new String[]{escapedValue}; + } + return queryConstraints; + } } Modified: incubator/stanbol/trunk/entityhub/yard/solr/src/test/java/org/apache/stanbol/entityhub/yard/solr/SolrDirectoryManagerTest.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/entityhub/yard/solr/src/test/java/org/apache/stanbol/entityhub/yard/solr/SolrDirectoryManagerTest.java?rev=1089443&r1=1089442&r2=1089443&view=diff ============================================================================== --- incubator/stanbol/trunk/entityhub/yard/solr/src/test/java/org/apache/stanbol/entityhub/yard/solr/SolrDirectoryManagerTest.java (original) +++ incubator/stanbol/trunk/entityhub/yard/solr/src/test/java/org/apache/stanbol/entityhub/yard/solr/SolrDirectoryManagerTest.java Wed Apr 6 13:14:26 2011 @@ -71,12 +71,12 @@ public class SolrDirectoryManagerTest { @Test(expected=IllegalArgumentException.class) public void testNullIndexName(){ - solrDirectoryManager.getSolrDirectory(null); + solrDirectoryManager.getSolrDirectory(null,true); } @Test(expected=IllegalArgumentException.class) public void testEmptyIndexName(){ - solrDirectoryManager.getSolrDirectory(""); + solrDirectoryManager.getSolrDirectory("",true); } @Test @@ -101,11 +101,11 @@ public class SolrDirectoryManagerTest { } @Test - public void testIndexInitialisation(){ + public void testDefaultIndexInitialisation(){ //this is actually tested already by the initialisation of the //SolrYardTest ... String indexName = "testIndexInitialisation_"+System.currentTimeMillis(); - File indexDir = solrDirectoryManager.getSolrDirectory(indexName); + File indexDir = solrDirectoryManager.getSolrDirectory(indexName,true); assertEquals(new File(expectedManagedDirectory,indexName), indexDir); assertTrue(indexDir.isDirectory()); } Modified: incubator/stanbol/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/parent/pom.xml?rev=1089443&r1=1089442&r2=1089443&view=diff ============================================================================== --- incubator/stanbol/trunk/parent/pom.xml (original) +++ incubator/stanbol/trunk/parent/pom.xml Wed Apr 6 13:14:26 2011 @@ -864,6 +864,21 @@ <classifier>app</classifier> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.launchpad.installer</artifactId> + <version>1.0.0</version> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.launchpad.api</artifactId> + <version>1.0.0</version> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.installer.core</artifactId> + <version>3.1.2</version> + </dependency> <!-- Testing Deps --> <dependency>
