Author: sletellier Date: 2011-05-03 19:55:52 +0200 (Tue, 03 May 2011) New Revision: 855 Url: http://nuiton.org/repositories/revision/wikitty/855 Log: - Creation of solr field #fulltext to search without type - Refactor FieldModifier to allow to force type to use on search Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.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/WikittySearchEngineSolr.java trunk/wikitty-solr/src/main/resources/schema.xml Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2011-05-02 14:52:21 UTC (rev 854) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2011-05-03 17:55:52 UTC (rev 855) @@ -55,7 +55,7 @@ * * @author poussin * @version $Revision$ - * + * extends ApplicationConfig * Last update: $Date$ * by : $Author$ */ 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-02 14:52:21 UTC (rev 854) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/FieldModifier.java 2011-05-03 17:55:52 UTC (rev 855) @@ -36,8 +36,10 @@ 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_DEFAULT_FIELD; 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.SOLR_WIKITTY_PREFIX; 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; @@ -70,6 +72,17 @@ this.extensionStorage = extensionStorage; } + /** + * Different cas d'entree + * <li> monext.monfield + * <li> *.monfield + * <li> monext.monfield.NUMERIC + * <li> *.monfield.NUMERIC + * + * @param transaction + * @param fqfieldname + * @return + */ public String convertToSolr(WikittyTransaction transaction, String fqfieldname) { String result = fqfieldname; String[] searchField = fqfieldname.split(WikittyUtil.FQ_FIELD_NAME_SEPARATOR_REGEX); @@ -85,36 +98,44 @@ String fieldName = searchField[1]; if (Criteria.ALL_EXTENSIONS.equals(extName)) { - fqfieldname = SOLR_ALL_EXTENSIONS + result = SOLR_ALL_EXTENSIONS + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; - } + // en #all le seul moyen d'avoir le type est qu'il soit donne dans le champs, sinon on ne peut pas le + // trouver + if (searchField.length >= 3) { + // On passe ici, si on indique dans le champs son type (ex: *.monfield.NUMERIC) + // utile pour force la recherche sur les bons champs lorsqu'on demande une recherche sur * == #all + String fieldNameType = searchField[2]; + TYPE type = FieldType.TYPE.valueOf(fieldNameType); + // Ajout du pattern solr pour discriminer le champs ex : _s, _sm, _wm ... + result = SolrUtil.getSolrCollectionFieldName(result, type); + } else { + log.error("Search on multi extentions (*) without field type, fallback search in fulltext"); + result = SOLR_DEFAULT_FIELD + + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + fieldName; + } + } else { + result = extName + 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); + // Ajout du pattern solr pour discriminer le champs ex : _s, _sm, _wm ... + // 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); } - return result; + if (fieldType != null) { // type can be null if extension version differ + TYPE type = fieldType.getType(); + if (fieldType.isCollection()) { + result = SolrUtil.getSolrCollectionFieldName(result, type); + } else { + result = SolrUtil.getSolrFieldName(result, type); + } + } } } } 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-05-02 14:52:21 UTC (rev 854) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2011-05-03 17:55:52 UTC (rev 855) @@ -881,9 +881,11 @@ // #all.<fieldname> // permet de faire des recherches inter extension sur un champs ayant // le meme nom. ex:Person.name et User.name + // Quoi qu'il arrive pour le #all on utilise du multivalue + String solrAllFqFieldName = SolrUtil.getSolrCollectionFieldName(fqfieldName, type); String solrAllFieldName = SOLR_ALL_EXTENSIONS + WikittyUtil.FQ_FIELD_NAME_SEPARATOR - + WikittyUtil.getFieldNameFromFQFieldName(solrFqFieldName); + + WikittyUtil.getFieldNameFromFQFieldName(solrAllFqFieldName); String solrNullFieldFqFieldName = SOLR_NULL_FIELD + fqfieldName; Modified: trunk/wikitty-solr/src/main/resources/schema.xml =================================================================== --- trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-02 14:52:21 UTC (rev 854) +++ trunk/wikitty-solr/src/main/resources/schema.xml 2011-05-03 17:55:52 UTC (rev 855) @@ -176,9 +176,12 @@ <!-- copy all field (except binary) in '#fulltext' field for fulltext search --> <field name="#fulltext" type="text" indexed="true" stored="false" multiValued="true"/> - <!-- copied field not stored --> - <dynamicField name="*_s_c" type="string_lc" indexed="true" stored="false" multiValued="true"/> - <dynamicField name="*_s_t" type="text" indexed="true" stored="false" multiValued="true"/> + <dynamicField name="#fulltext.*" type="text" indexed="true" stored="false" multiValued="true"/> + <!-- copied field not stored --> + <dynamicField name="*_s_c" type="string_lc" indexed="true" stored="false" multiValued="false"/> + <dynamicField name="*_s_t" type="text" indexed="true" stored="false" multiValued="false"/> + <dynamicField name="*_s_cm" type="string_lc" indexed="true" stored="false" multiValued="true"/> + <dynamicField name="*_s_tm" type="text" indexed="true" stored="false" multiValued="true"/> <!-- on indexe pas les binary field --> <dynamicField name="*_bi" type="binary" indexed="false" stored="false" multiValued="false"/> @@ -224,10 +227,25 @@ <copyField source="*_sm" dest="#fulltext"/> <copyField source="*_wm" dest="#fulltext"/> - <!-- copy String field for to lower case version --> - <copyField source="*_s" dest="*_s_c"/> - <!-- copy String field for text indexed format version --> - <copyField source="*_s" dest="*_s_t"/> + <copyField source="*_b" dest="#fulltext.*"/> + <copyField source="*_d" dest="#fulltext.*"/> + <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"/> + <!-- copy String field for text indexed format version --> + <copyField source="*_s" dest="*_s_t"/> + <!-- copy String field for to lower case version --> + <copyField source="*_sm" dest="*_s_cm"/> + <!-- copy String field for text indexed format version --> + <copyField source="*_sm" dest="*_s_tm"/> + </schema>
participants (1)
-
sletellier@users.nuiton.org