r799 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/entities wikitty-api/src/test/java/org/nuiton/wikitty/conform wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr/src/main/resources wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr
Author: jcouteau Date: 2011-04-13 16:57:37 +0200 (Wed, 13 Apr 2011) New Revision: 799 Url: http://nuiton.org/repositories/revision/wikitty/799 Log: Change indexation of fields. Now multivalued and non multivalued fields are indexed in a different way so that sort on not multivalued field is available Added: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java Removed: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/TypeFieldModifier.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.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/SolrUtil.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java trunk/wikitty-solr/src/main/resources/schema.xml trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/FieldType.java 2011-04-13 14:57:37 UTC (rev 799) @@ -59,7 +59,7 @@ * convert string to TYPE, this method accept not trimed and not well * cased string (difference with valueOf) * @param name - * @return TYPE else exception is throw + * @return TYPE else exception is thrown */ public static TYPE parse(String name) { TYPE result = valueOf(name.trim().toUpperCase()); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2011-04-13 14:57:37 UTC (rev 799) @@ -259,7 +259,7 @@ @Test public void testStoreFindAll() throws Exception { - // create some wikitty to permit search test + // create some wikitty to permit search test List<Wikitty> wikitties = new ArrayList<Wikitty>(); String[] wValues = new String[] { // wikitty[ 0 ] @@ -289,10 +289,10 @@ w.setField(EXT_TEST.getName(), "fieldName1", "003309"); Criteria criteria = Search.query(w).criteria() .addSortDescending(EXT_TEST.getName() + ".fieldName0"); - PagedResult<String> resultFind = getProxy().findAllIdByCriteria(criteria); + PagedResult<Wikitty> resultFind = getProxy().findAllByCriteria(criteria); assertEquals(2, resultFind.size()); - List<Wikitty> wikittyFind = getProxy().restore(resultFind.getAll()); + List<Wikitty> wikittyFind = resultFind.getAll(); assertEquals(wikitties.subList(0, 2), wikittyFind); } Deleted: 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-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-04-13 14:57:37 UTC (rev 799) @@ -1,42 +0,0 @@ -/* - * #%L - * Wikitty :: wikitty-solr-impl - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package org.nuiton.wikitty.storage.solr; - -import org.nuiton.wikitty.services.WikittyTransaction; - - -/** - * use to permit client to modify fieldname during query generation - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public interface FieldModifier { - public String convertToSolr(WikittyTransaction transaction, String fieldname); - public String convertToField(WikittyTransaction transaction, String solrName); -} Copied: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java (from rev 797, trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/TypeFieldModifier.java) =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java (rev 0) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-04-13 14:57:37 UTC (rev 799) @@ -0,0 +1,144 @@ +/* + * #%L + * Wikitty :: wikitty-solr-impl + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package org.nuiton.wikitty.storage.solr; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.entities.FieldType; +import org.nuiton.wikitty.entities.FieldType.TYPE; +import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.operators.Element; +import org.nuiton.wikitty.services.WikittyTransaction; +import org.nuiton.wikitty.storage.WikittyExtensionStorage; + +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ALL_EXTENSIONS; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_EXTENSIONS; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ID; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY_MULTIVALUED; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class FieldModifier { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(FieldModifier.class); + + protected WikittyExtensionStorage extensionStorage; + + public FieldModifier(WikittyExtensionStorage extensionStorage) { + this.extensionStorage = extensionStorage; + } + + public String convertToSolr(WikittyTransaction transaction, String fqfieldname) { + String result = fqfieldname; + String[] searchField = fqfieldname.split(WikittyUtil.FQ_FIELD_NAME_SEPARATOR_REGEX); + + if (Element.ELT_EXTENSION.equals(fqfieldname)) { + result = SOLR_EXTENSIONS; + + } else if (Element.ELT_ID.equals(fqfieldname)) { + result = SOLR_ID; + + } else if (searchField.length >= 2) { + String extName = searchField[0]; + String fieldName = searchField[1]; + + if (Criteria.ALL_EXTENSIONS.equals(extName)) { + fqfieldname = SOLR_ALL_EXTENSIONS + + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; + } + + if (searchField.length >= 3) { + // TODO poussin 20101209 je ne vois pas dans quel cas on passe ici + String fieldNameType = searchField[2]; + TYPE type = FieldType.TYPE.valueOf(fieldNameType); + result = SolrUtil.getSolrFieldName(fqfieldname, type); + return result; + } + + // Search type of field in extension + String version = + extensionStorage.getLastVersion(transaction, extName); + if (version != null) { // not valid extension if version == null + WikittyExtension ext = extensionStorage.restore( + transaction, extName, version); + FieldType fieldType = ext.getFieldType(fieldName); + if (log.isDebugEnabled()) { + log.debug(ext.toDefinition() + " for " + fieldName); + } + if (fieldType != null) { // type can be null if extension version differ + TYPE type = fieldType.getType(); + if (fieldType.isCollection()) { + result = SolrUtil.getSolrCollectionFieldName(fqfieldname, type); + } else { + result = SolrUtil.getSolrFieldName(fqfieldname, type); + } + return result; + } + } + } + + return result; + } + + public String convertToField(WikittyTransaction transaction, String solrName) { + String fieldName = solrName.replaceAll( + "(" + SUFFIX_BINARY + "$)" + + "|(" + SUFFIX_BOOLEAN + "$)" + + "|(" + SUFFIX_DATE + "$)" + + "|(" + SUFFIX_STRING + "$)" + + "|(" + SUFFIX_WIKITTY + "$)" + + "|(" + SUFFIX_NUMERIC + "$)" + + "|(" + SUFFIX_BINARY_MULTIVALUED + "$)" + + "|(" + SUFFIX_BOOLEAN_MULTIVALUED + "$)" + + "|(" + SUFFIX_DATE_MULTIVALUED + "$)" + + "|(" + SUFFIX_STRING_MULTIVALUED + "$)" + + "|(" + SUFFIX_WIKITTY_MULTIVALUED + "$)" + + "|(" + SUFFIX_NUMERIC_MULTIVALUED + "$)", ""); + if (SOLR_EXTENSIONS.equals(fieldName)) { + fieldName = Element.ELT_EXTENSION; + } + return 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-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/Restriction2Solr.java 2011-04-13 14:57:37 UTC (rev 799) @@ -71,22 +71,9 @@ private static final int MAX_SUBQUERY_RESULT = 100; - final static protected FieldModifier dummyFieldModifier = new FieldModifier() { - public String convertToSolr(WikittyTransaction transaction, String fieldname) { - return fieldname; - } - public String convertToField(WikittyTransaction transaction, String solrName) { - return solrName; - } - }; - protected FieldModifier fieldModifer; protected WikittyTransaction transaction; - public Restriction2Solr() { - this(null, dummyFieldModifier); - } - // TODO 20101201 jru improve manage transaction and fieldModifeir in helper public Restriction2Solr(WikittyTransaction transaction, FieldModifier fieldModifer) { this.transaction = transaction; Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2011-04-13 14:57:37 UTC (rev 799) @@ -45,6 +45,12 @@ import org.nuiton.wikitty.entities.WikittyTreeNode; import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ID; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING_MULTIVALUED; +import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY_MULTIVALUED; import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.TREENODE_PARENTS; import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.TREENODE_ATTACHED; import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY; @@ -167,7 +173,7 @@ * @return Map key:TreeNode id, value; solr document associate with id * @since 3.1 */ - static public Map<String, SolrDocument> findAllByField( + static public Map<String, SolrDocument> findAllByField( SolrServer solrServer, String solrField, Collection<String> ids) { Map<String, SolrDocument> result = new HashMap<String, SolrDocument>(); if (ids != null && ids.size() > 0) { @@ -224,7 +230,7 @@ /** * if you change this method, change - * {@link TypeFieldModifier#convertToField(org.nuiton.wikitty.services.WikittyTransaction, java.lang.String)} + * {@link FieldModifier#convertToField(org.nuiton.wikitty.services.WikittyTransaction, java.lang.String)} * too * * @param fqfieldName FQ field name @@ -251,6 +257,34 @@ } /** + * if you change this method, change + * {@link FieldModifier#convertToField(org.nuiton.wikitty.services.WikittyTransaction, java.lang.String)} + * too + * + * @param fqfieldName FQ field name + * @param type of field + * @return field name + */ + static public String getSolrCollectionFieldName(String fqfieldName, TYPE type) { + switch (type) { + case BINARY: + return fqfieldName + SUFFIX_BINARY_MULTIVALUED; + case BOOLEAN: + return fqfieldName + SUFFIX_BOOLEAN_MULTIVALUED; + case DATE: + return fqfieldName + SUFFIX_DATE_MULTIVALUED; + case STRING: + return fqfieldName + SUFFIX_STRING_MULTIVALUED; + case NUMERIC: + return fqfieldName + SUFFIX_NUMERIC_MULTIVALUED; + case WIKITTY: + return fqfieldName + SUFFIX_WIKITTY_MULTIVALUED; + default: + return fqfieldName; + } + } + + /** * Copy solr document * * @param source solr document source Deleted: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/TypeFieldModifier.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/TypeFieldModifier.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/TypeFieldModifier.java 2011-04-13 14:57:37 UTC (rev 799) @@ -1,135 +0,0 @@ -/* - * #%L - * Wikitty :: wikitty-solr-impl - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ -package org.nuiton.wikitty.storage.solr; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.wikitty.WikittyUtil; -import org.nuiton.wikitty.entities.FieldType; -import org.nuiton.wikitty.entities.FieldType.TYPE; -import org.nuiton.wikitty.entities.WikittyExtension; -import org.nuiton.wikitty.search.Criteria; -import org.nuiton.wikitty.search.operators.Element; -import org.nuiton.wikitty.services.WikittyTransaction; -import org.nuiton.wikitty.storage.WikittyExtensionStorage; - -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ALL_EXTENSIONS; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_EXTENSIONS; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SOLR_ID; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BINARY; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_BOOLEAN; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_DATE; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_NUMERIC; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_STRING; -import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.SUFFIX_WIKITTY; - -/** - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class TypeFieldModifier implements FieldModifier { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(TypeFieldModifier.class); - - protected WikittyExtensionStorage extensionStorage; - - public TypeFieldModifier(WikittyExtensionStorage extensionStorage) { - this.extensionStorage = extensionStorage; - } - - @Override - public String convertToSolr(WikittyTransaction transaction, String fqfieldname) { - String result = fqfieldname; - String[] searchField = fqfieldname.split(WikittyUtil.FQ_FIELD_NAME_SEPARATOR_REGEX); - - if (Element.ELT_EXTENSION.equals(fqfieldname)) { - result = SOLR_EXTENSIONS; - - } else if (Element.ELT_ID.equals(fqfieldname)) { - result = SOLR_ID; - - } else if (searchField.length >= 2) { - String extName = searchField[0]; - String fieldName = searchField[1]; - - if (Criteria.ALL_EXTENSIONS.equals(extName)) { - fqfieldname = SOLR_ALL_EXTENSIONS - + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; - } - - if (searchField.length >= 3) { - // TODO poussin 20101209 je ne vois pas dans quel cas on passe ici - String fieldNameType = searchField[2]; - TYPE type = FieldType.TYPE.valueOf(fieldNameType); - result = SolrUtil.getSolrFieldName(fqfieldname, type); - return result; - } - - // Search type of field in extension - String version = - extensionStorage.getLastVersion(transaction, extName); - if (version != null) { // not valid extension if version == null - WikittyExtension ext = extensionStorage.restore( - transaction, extName, version); - FieldType fieldType = ext.getFieldType(fieldName); - if (log.isDebugEnabled()) { - log.debug(ext.toDefinition() + " for " + fieldName); - } - if (fieldType != null) { // type can be null if extension version differ - TYPE type = fieldType.getType(); - result = SolrUtil.getSolrFieldName(fqfieldname, type); - return result; - } - } - } - - return result; - } - - /** - * if you change this, change - * {@link WikittySearchEngineSolr#getSolrFieldName(java.lang.String, org.nuiton.wikitty.entities.FieldType.TYPE)} - * too - */ - @Override - public String convertToField(WikittyTransaction transaction, String solrName) { - String fieldName = solrName.replaceAll( - "(" + SUFFIX_BINARY + "$)" - + "|(" + SUFFIX_BOOLEAN + "$)" - + "|(" + SUFFIX_DATE + "$)" - + "|(" + SUFFIX_STRING + "$)" - + "|(" + SUFFIX_WIKITTY + "$)" - + "|(" + SUFFIX_NUMERIC + "$)", ""); - if (SOLR_EXTENSIONS.equals(fieldName)) { - fieldName = Element.ELT_EXTENSION; - } - 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-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-04-13 14:57:37 UTC (rev 799) @@ -87,7 +87,7 @@ protected SolrServer solrServer; /** Field modifier use to transform to solr format */ - protected TypeFieldModifier fieldModifier; + protected FieldModifier fieldModifier; /** JTA resource */ protected SolrResource solrResource; @@ -134,7 +134,7 @@ CoreContainer coreContainer = initializer.initialize(); solrServer = new EmbeddedSolrServer(coreContainer, ""); - fieldModifier = new TypeFieldModifier(extensionStorage); + fieldModifier = new FieldModifier(extensionStorage); solrResource = new SolrResource(solrServer); } catch (Exception eee) { @@ -421,7 +421,7 @@ newAtts = null; } - addToIndexDocument(newDoc, TYPE.WIKITTY, field, newAtts); + addToIndexDocument(newDoc, TYPE.WIKITTY, field, newAtts, true); solrResource.addDoc(id, newDoc); } } @@ -615,7 +615,7 @@ // constitue de l'id et de l'indexation d'arbre qui sera // reutilise lors du store de reel objet doc = new SolrInputDocument(); - addToIndexDocument(doc, null, SOLR_ID, attId); + addToIndexDocument(doc, null, SOLR_ID, attId, true); } else if (doc == null) { doc = new SolrInputDocument(); SolrUtil.copySolrDocument(oldDoc, doc); @@ -829,17 +829,13 @@ for (SolrDocument d : solrResults) { String id = (String) d.getFieldValue(SOLR_ID); - List<String> parentIds = (List<String>) d.getFieldValue(SolrUtil.getSolrFieldName( + String parentId = (String) d.getFieldValue(SolrUtil.getSolrFieldName( WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT, TYPE.WIKITTY)); int nb = counts.containsKey(id) ? counts.get(id) : 0; TreeNodeResult<String> child = new TreeNodeResult<String>(id, nb); allTreeNodeResult.put(id, child); - if (parentIds != null) { - for (String parentId : parentIds) { childParent.put(id, parentId); - } - } } // construction de l'arbre avant de le retourner for(Map.Entry<String, TreeNodeResult<String>> e : allTreeNodeResult.entrySet()) { @@ -868,12 +864,19 @@ } protected void addToIndexDocument(SolrInputDocument doc, - TYPE type, String fqfieldName, Object fieldValue) { + TYPE type, String fqfieldName, Object fieldValue, + boolean collection) { if (fqfieldName.startsWith(SOLR_WIKITTY_PREFIX)) { doc.remove(fqfieldName); doc.addField(fqfieldName, fieldValue); } else { - String solrFqFieldName = SolrUtil.getSolrFieldName(fqfieldName, type); + String solrFqFieldName; + + if (collection) { + solrFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type); + } else { + solrFqFieldName = SolrUtil.getSolrFieldName(fqfieldName, type); + } // #all.<fieldname> // permet de faire des recherches inter extension sur un champs ayant @@ -913,6 +916,7 @@ protected void addToIndexDocument(SolrInputDocument doc, Wikitty w, String fqfieldName) { TYPE type = null; Object fieldValue; + boolean collection = false; if (SOLR_ID.equals(fqfieldName)) { // extra field #id fieldValue = w.getId(); @@ -923,11 +927,12 @@ // un champs normal FieldType fieldType = w.getFieldType(fqfieldName); type = fieldType.getType(); + collection = fieldType.isCollection(); fieldValue = w.getFqField(fqfieldName); } - addToIndexDocument(doc, type, fqfieldName, fieldValue); + addToIndexDocument(doc, type, fqfieldName, fieldValue, collection); } /** 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-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2011-04-13 14:57:37 UTC (rev 799) @@ -85,6 +85,13 @@ static final public String SUFFIX_STRING = "_s"; static final public String SUFFIX_WIKITTY = "_w"; + static final public String SUFFIX_BINARY_MULTIVALUED = "_bim"; + static final public String SUFFIX_BOOLEAN_MULTIVALUED = "_bm"; + static final public String SUFFIX_NUMERIC_MULTIVALUED = "_dm"; + static final public String SUFFIX_DATE_MULTIVALUED = "_dtm"; + static final public String SUFFIX_STRING_MULTIVALUED = "_sm"; + static final public String SUFFIX_WIKITTY_MULTIVALUED = "_wm"; + static final public String SUFFIX_STRING_LOWERCASE = "_c"; static final public String SUFFIX_STRING_FULLTEXT = "_t"; Modified: trunk/wikitty-solr/src/main/resources/schema.xml =================================================================== --- trunk/wikitty-solr/src/main/resources/schema.xml 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/main/resources/schema.xml 2011-04-13 14:57:37 UTC (rev 799) @@ -122,8 +122,8 @@ <fields> - <!-- WARNING ALL DATA MUST BE STORED, WE MUST CAN REINDEX WIKITTY WITH - INDEXED BECAUSE FOR HIEARCHICAL FACET, THERE ARE COPY OF DOCUMENT --> + <!-- WARNING ALL DATA MUST BE STORED, WE MUST BE ABLE TO REINDEX WIKITTY WITH + INDEXED BECAUSE OF HIERARCHICAL FACET, THERE ARE COPY OF DOCUMENT --> <field name="#id" type="string" required="true" indexed="true" stored="true" multiValued="false"/> <field name="#extensions" type="string" indexed="true" stored="true" multiValued="true"/> @@ -141,12 +141,18 @@ <dynamicField name="*_s_t" type="text" indexed="true" stored="false" multiValued="true"/> <!-- on indexe pas les binary field --> - <dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="true"/> - <dynamicField name="*_b" type="boolean" indexed="true" stored="true" multiValued="true"/> - <dynamicField name="*_d" type="numeric" indexed="true" stored="true" multiValued="true"/> - <dynamicField name="*_dt" type="date" indexed="true" stored="true" multiValued="true"/> - <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="true"/> - <dynamicField name="*_w" type="wikitty" indexed="true" stored="true" multiValued="true"/> + <dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="false"/> + <dynamicField name="*_b" type="boolean" indexed="true" stored="true" multiValued="false"/> + <dynamicField name="*_d" type="numeric" indexed="true" stored="true" multiValued="false"/> + <dynamicField name="*_dt" type="date" indexed="true" stored="true" multiValued="false"/> + <dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="false"/> + <dynamicField name="*_w" type="wikitty" indexed="true" stored="true" multiValued="false"/> + <dynamicField name="*_bim" type="binary" indexed="false" stored="false" multiValued="true"/> + <dynamicField name="*_bm" type="boolean" indexed="true" stored="true" multiValued="true"/> + <dynamicField name="*_dm" type="numeric" indexed="true" stored="true" multiValued="true"/> + <dynamicField name="*_dtm" type="date" indexed="true" stored="true" multiValued="true"/> + <dynamicField name="*_sm" type="string" indexed="true" stored="true" multiValued="true"/> + <dynamicField name="*_wm" type="wikitty" indexed="true" stored="true" multiValued="true"/> <!-- all other field, needed if we do query with unregistered extension. No result is returned but is the right behavior --> @@ -172,6 +178,11 @@ <copyField source="*_dt" dest="#fulltext"/> <copyField source="*_s" dest="#fulltext"/> <copyField source="*_w" dest="#fulltext"/> + <copyField source="*_bm" dest="#fulltext"/> + <copyField source="*_dm" dest="#fulltext"/> + <copyField source="*_dtm" dest="#fulltext"/> + <copyField source="*_sm" dest="#fulltext"/> + <copyField source="*_wm" dest="#fulltext"/> <!-- copy String field for to lower case version --> <copyField source="*_s" dest="*_s_c"/> Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java 2011-04-13 14:57:37 UTC (rev 799) @@ -35,7 +35,7 @@ protected WikittyProxy proxy = null; - protected static WikittyConfig instance = new WikittyConfig(); + protected static WikittyConfig instance = new WikittyConfig("wikitty-config-sample-inmemory.properties"); protected static WikittyServiceEnhanced ws; Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearch2Test.java 2011-04-13 14:57:37 UTC (rev 799) @@ -37,7 +37,7 @@ WikittyService service; - static protected WikittyConfig config = new WikittyConfig(); + static protected WikittyConfig config = new WikittyConfig("wikitty-config-sample-inmemory.properties"); @BeforeClass public static void initTests() { Modified: trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java =================================================================== --- trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2011-04-13 14:40:47 UTC (rev 798) +++ trunk/wikitty-solr/src/test/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrTest.java 2011-04-13 14:57:37 UTC (rev 799) @@ -62,7 +62,7 @@ protected static WikittyServiceSolr ws; - protected static WikittyConfig instance = new WikittyConfig(); + protected static WikittyConfig instance = new WikittyConfig("wikitty-config-sample-inmemory.properties"); protected WikittyProxy proxy = new WikittyProxy(ws);
participants (1)
-
jcouteau@users.nuiton.org