Index: main/plugin-cms/src/org/ametys/cms/lucene/LuceneIndexHandler.java =================================================================== --- main/plugin-cms/src/org/ametys/cms/lucene/LuceneIndexHandler.java (revision 36870) +++ main/plugin-cms/src/org/ametys/cms/lucene/LuceneIndexHandler.java (working copy) @@ -39,6 +39,18 @@ /** Lucene document to be indexed */ protected Document _document; + /** Field name FULL */ + protected String _fieldNameFull; + + /** Field name ALL NOT ANALYZED */ + protected String _fieldNameNotAnalyzed; + + /** Field name EXCERPT */ + protected String _fieldNameExcerpt; + + /** Field name EXCERPT LENGTH */ + protected int _excerptLength; + private boolean _ignoreElmt; /** @@ -47,9 +59,26 @@ */ public LuceneIndexHandler(Document document) { + this(document, FieldNames.FULL, FieldNames.ALL_NOT_ANALYZED, FieldNames.EXCERPT, 200); + } + + /** + * Creates an handler by setting its document and fieldname + * @param document + * @param fieldNameFull + * @param fieldNameNotAnalyzed + * @param fieldNameExcerpt + * @param excerptLength + */ + public LuceneIndexHandler(Document document, String fieldNameFull, String fieldNameNotAnalyzed, String fieldNameExcerpt, int excerptLength) + { _document = document; + _fieldNameFull = fieldNameFull; + _fieldNameNotAnalyzed = fieldNameNotAnalyzed; + _fieldNameExcerpt = fieldNameExcerpt; + _excerptLength = excerptLength; } - + @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { @@ -88,21 +117,21 @@ { String bodyText = _body.toString(); - _document.add(new Field(FieldNames.FULL, bodyText, Store.NO, Index.ANALYZED)); + _document.add(new Field(_fieldNameFull, bodyText, Store.NO, Index.ANALYZED)); String[] words = StringUtils.split(bodyText); for (String word : words) { - _document.add(new Field(FieldNames.ALL_NOT_ANALYZED, StringUtils.strip(word, ",?!:()[].{}=").toLowerCase(), Store.NO, Index.NOT_ANALYZED)); + _document.add(new Field(_fieldNameNotAnalyzed, StringUtils.strip(word, ",?!:()[].{}=").toLowerCase(), Store.NO, Index.NOT_ANALYZED)); } - int summaryEndIndex = bodyText.lastIndexOf(' ', 200); + int summaryEndIndex = bodyText.lastIndexOf(' ', _excerptLength); if (summaryEndIndex == -1) { summaryEndIndex = bodyText.length(); } - _document.add(new Field(FieldNames.EXCERPT, bodyText.substring(0, summaryEndIndex) + "...", Store.YES, Index.NO)); + _document.add(new Field(_fieldNameExcerpt, bodyText.substring(0, summaryEndIndex) + "...", Store.YES, Index.NO)); } } Index: main/plugin-cms/src/org/ametys/cms/lucene/MetadataIndexer.java =================================================================== --- main/plugin-cms/src/org/ametys/cms/lucene/MetadataIndexer.java (revision 36870) +++ main/plugin-cms/src/org/ametys/cms/lucene/MetadataIndexer.java (working copy) @@ -217,7 +217,7 @@ String[] entries = composite.getMetadataNames(); int size = entries.length; - document.add(new Field(prefix + name + "/size", String.valueOf(size), Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + name + "/size", String.valueOf(size), Store.YES, Index.NOT_ANALYZED)); for (String entry : entries) { @@ -292,7 +292,7 @@ try { is = richText.getInputStream(); - _parser.parse(new InputSource(is), new LuceneIndexHandler(document)); + _parser.parse(new InputSource(is), new LuceneIndexHandler(document, getGlobalPrefix() + FieldNames.FULL, getGlobalPrefix() + FieldNames.ALL_NOT_ANALYZED, getGlobalPrefix() + FieldNames.EXCERPT, 200)); } finally { @@ -331,10 +331,10 @@ String[] strValues = metadata.getStringArray(name, new String[0]); for (String value : strValues) { - document.add(new Field(FieldNames.FULL, value, Store.NO, Index.ANALYZED)); + document.add(new Field(getGlobalPrefix() + FieldNames.FULL, value, Store.NO, Index.ANALYZED)); Enumerator enumerator = definition.getEnumerator(); - document.add(new Field(prefix + fieldName, value, Store.YES, enumerator == null ? Index.ANALYZED : Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName, value, Store.YES, enumerator == null ? Index.ANALYZED : Index.NOT_ANALYZED)); // Index "-for-sorting" field only for single metadata and DO NOT index a 'title-for-sorting' field (reserved field for page sorting) if (strValues.length == 1 && !"title".equals(prefix + fieldName)) @@ -344,19 +344,19 @@ I18nizableText label = enumerator.getEntry(value); if (label != null) { - document.add(new Field(prefix + fieldName + _FOR_SORTING_SUFFIX, _i18nUtils.translate(label, content.getLanguage()), Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName + _FOR_SORTING_SUFFIX, _i18nUtils.translate(label, content.getLanguage()), Store.YES, Index.NOT_ANALYZED)); } } else { - document.add(new Field(prefix + fieldName + _FOR_SORTING_SUFFIX, value, Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName + _FOR_SORTING_SUFFIX, value, Store.YES, Index.NOT_ANALYZED)); } } String[] words = StringUtils.split(value); for (String word : words) { - document.add(new Field(FieldNames.ALL_NOT_ANALYZED, StringUtils.strip(word, ",?!:()[].{}=").toLowerCase(), Store.NO, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + FieldNames.ALL_NOT_ANALYZED, StringUtils.strip(word, ",?!:()[].{}=").toLowerCase(), Store.NO, Index.NOT_ANALYZED)); } } } @@ -386,8 +386,8 @@ Date[] dateValues = metadata.getDateArray(name); for (Date value : dateValues) { - document.add(new Field(prefix + fieldName, DateTools.dateToString(value, DateTools.Resolution.DAY), Store.YES, Index.NOT_ANALYZED)); - document.add(new Field(prefix + fieldName + _FOR_SORTING_SUFFIX, DateTools.dateToString(value, DateTools.Resolution.DAY), Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName, DateTools.dateToString(value, DateTools.Resolution.DAY), Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName + _FOR_SORTING_SUFFIX, DateTools.dateToString(value, DateTools.Resolution.DAY), Store.YES, Index.NOT_ANALYZED)); } } @@ -614,8 +614,8 @@ String[] values = metadata.getStringArray(name); for (String value : values) { - document.add(new Field(prefix + fieldName, value, Store.YES, Index.NOT_ANALYZED)); - document.add(new Field(prefix + fieldName + _FOR_SORTING_SUFFIX, value, Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName, value, Store.YES, Index.NOT_ANALYZED)); + document.add(new Field(getGlobalPrefix() + prefix + fieldName + _FOR_SORTING_SUFFIX, value, Store.YES, Index.NOT_ANALYZED)); } } @@ -648,7 +648,7 @@ { is = metadata.getBinaryMetadata(name).getInputStream(); String value = _tika.parseToString(is); - document.add(new Field(FieldNames.FULL, value, Store.NO, Index.ANALYZED)); + document.add(new Field(getGlobalPrefix() + FieldNames.FULL, value, Store.NO, Index.ANALYZED)); } finally { @@ -677,5 +677,13 @@ } } } - + + /** + * Get global prefix before each indexed name. + * @return Empty string by default, sb_ for SubProgramForProgramMetadataIndexer + */ + protected String getGlobalPrefix() + { + return ""; + } }