r723 - in testlucenefacets: . src src/main src/main/java src/main/java/org src/main/java/org/nuiton src/main/resources
Author: echatellier Date: 2014-07-04 17:00:33 +0200 (Fri, 04 Jul 2014) New Revision: 723 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/723 Log: Add lucene demo Added: testlucenefacets/pom.xml testlucenefacets/src/ testlucenefacets/src/main/ testlucenefacets/src/main/java/ testlucenefacets/src/main/java/org/ testlucenefacets/src/main/java/org/nuiton/ testlucenefacets/src/main/java/org/nuiton/TestNavigationLuceneFacets.java testlucenefacets/src/main/java/org/nuiton/TestOnlyLuceneFacets.java testlucenefacets/src/main/java/org/nuiton/TestRangeLuceneFacets.java testlucenefacets/src/main/resources/ testlucenefacets/src/main/resources/log4j.properties Added: testlucenefacets/pom.xml =================================================================== --- testlucenefacets/pom.xml (rev 0) +++ testlucenefacets/pom.xml 2014-07-04 15:00:33 UTC (rev 723) @@ -0,0 +1,41 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>TestLuceneFacets</groupId> + <artifactId>TestLuceneFacets</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <dependencies> + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-core</artifactId> + <version>4.9.0</version> + </dependency> + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-facet</artifactId> + <version>4.9.0</version> + </dependency> + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-queryparser</artifactId> + <version>4.9.0</version> + </dependency> + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-analyzers-common</artifactId> + <version>4.9.0</version> + </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.17</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.3.2</version> + <scope>compile</scope> + </dependency> + </dependencies> +</project> Property changes on: testlucenefacets/pom.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: testlucenefacets/src/main/java/org/nuiton/TestNavigationLuceneFacets.java =================================================================== --- testlucenefacets/src/main/java/org/nuiton/TestNavigationLuceneFacets.java (rev 0) +++ testlucenefacets/src/main/java/org/nuiton/TestNavigationLuceneFacets.java 2014-07-04 15:00:33 UTC (rev 723) @@ -0,0 +1,174 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Codelutin, Chatellier Eric + * %% + * 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; + +import java.io.File; +import java.io.IOException; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.document.TextField; +import org.apache.lucene.facet.DrillDownQuery; +import org.apache.lucene.facet.FacetField; +import org.apache.lucene.facet.FacetResult; +import org.apache.lucene.facet.Facets; +import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsConfig; +import org.apache.lucene.facet.LabelAndValue; +import org.apache.lucene.facet.taxonomy.FastTaxonomyFacetCounts; +import org.apache.lucene.facet.taxonomy.TaxonomyReader; +import org.apache.lucene.facet.taxonomy.TaxonomyWriter; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter; +import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexWriterConfig.OpenMode; +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.LockObtainFailedException; +import org.apache.lucene.store.NIOFSDirectory; +import org.apache.lucene.util.Version; + +/** + * See http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/contrib-... + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class TestNavigationLuceneFacets { + protected static Analyzer analyser = new StandardAnalyzer(Version.LUCENE_4_9); + + public static void main(String... args) throws IOException, ParseException { + create(); + search(); + } + + /** + * Get lucene index directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getIndexDirectory() throws IOException { + File path = new File("/tmp/lucene/index"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + /** + * Get lucene taxo directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getTaxoDirectory() throws IOException { + File path = new File("/tmp/lucene/taxo"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + public static void create() throws CorruptIndexException, LockObtainFailedException, IOException { + + IndexWriter writer = new IndexWriter(getIndexDirectory(), new IndexWriterConfig(Version.LUCENE_4_9, analyser)); + TaxonomyWriter taxo = new DirectoryTaxonomyWriter(getTaxoDirectory(), OpenMode.CREATE); + FacetsConfig config = new FacetsConfig(); + + writer.deleteAll(); + + Document doc1 = new Document(); + doc1.add(new TextField("name", "tutu is red", Store.YES)); + doc1.add(new FacetField("color", "red")); + doc1.add(new FacetField("category", "truc")); + doc1.add(new FacetField("birthdate", "1890")); + writer.addDocument(config.build(taxo, doc1)); + + Document doc2 = new Document(); + doc2.add(new TextField("name", "tutu is blue 2", Store.YES)); + doc2.add(new FacetField("color", "blue")); + doc2.add(new FacetField("category", "machin")); + doc2.add(new FacetField("birthdate", "1955")); + writer.addDocument(config.build(taxo, doc2)); + + Document doc3 = new Document(); + doc3.add(new TextField("name", "tutu is blue", Store.YES)); + doc3.add(new FacetField("color", "blue")); + doc3.add(new FacetField("category", "bidule")); + doc3.add(new FacetField("birthdate", "1984")); + writer.addDocument(config.build(taxo, doc3)); + + writer.close(); + taxo.close(); + } + + public static void search() throws IOException, ParseException { + + // opening a lucene index + IndexReader indexReader = DirectoryReader.open(getIndexDirectory()); + IndexSearcher searcher = new IndexSearcher(indexReader); + TaxonomyReader taxoReader = new DirectoryTaxonomyReader(getTaxoDirectory()); + FacetsConfig config = new FacetsConfig(); + + + DrillDownQuery q = new DrillDownQuery(config); + q.add("color", "red"); + + // create query + //QueryParser parser = new QueryParser(Version.LUCENE_4_9, "name", analyser); + //Query q = parser.parse("tutu"); + + // perform search + FacetsCollector facetsCollector = new FacetsCollector(); + //FacetsCollector.search(searcher, q, 10, facetsCollector); + searcher.search(q, null, facetsCollector); + //TopScoreDocCollector topDocsCollector = TopScoreDocCollector.create(10, true); + //searcher.search(q, MultiCollector.wrap(topDocsCollector, facetsCollector)); + + Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, facetsCollector); + for (FacetResult facetResult : facets.getAllDims(10)) { + System.out.println("Facet : " + facetResult.dim + + " (total " + facetResult.childCount + ")"); + for (LabelAndValue labelAndValue : facetResult.labelValues) { + System.out.println(" - " + labelAndValue.label + " : " + labelAndValue.value); + } + } + + taxoReader.close(); + //searcher. + indexReader.close(); + } + +} Property changes on: testlucenefacets/src/main/java/org/nuiton/TestNavigationLuceneFacets.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: testlucenefacets/src/main/java/org/nuiton/TestOnlyLuceneFacets.java =================================================================== --- testlucenefacets/src/main/java/org/nuiton/TestOnlyLuceneFacets.java (rev 0) +++ testlucenefacets/src/main/java/org/nuiton/TestOnlyLuceneFacets.java 2014-07-04 15:00:33 UTC (rev 723) @@ -0,0 +1,169 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Codelutin, Chatellier Eric + * %% + * 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; + +import java.io.File; +import java.io.IOException; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.document.TextField; +import org.apache.lucene.facet.FacetField; +import org.apache.lucene.facet.FacetResult; +import org.apache.lucene.facet.Facets; +import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsConfig; +import org.apache.lucene.facet.LabelAndValue; +import org.apache.lucene.facet.taxonomy.FastTaxonomyFacetCounts; +import org.apache.lucene.facet.taxonomy.TaxonomyReader; +import org.apache.lucene.facet.taxonomy.TaxonomyWriter; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter; +import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexWriterConfig.OpenMode; +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.LockObtainFailedException; +import org.apache.lucene.store.NIOFSDirectory; +import org.apache.lucene.util.Version; + +/** + * See http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/contrib-... + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class TestOnlyLuceneFacets { + protected static Analyzer analyser = new StandardAnalyzer(Version.LUCENE_4_9); + + public static void main(String... args) throws IOException, ParseException { + create(); + search(); + } + + /** + * Get lucene index directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getIndexDirectory() throws IOException { + File path = new File("/tmp/lucene/index"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + /** + * Get lucene taxo directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getTaxoDirectory() throws IOException { + File path = new File("/tmp/lucene/taxo"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + public static void create() throws CorruptIndexException, LockObtainFailedException, IOException { + + IndexWriter writer = new IndexWriter(getIndexDirectory(), new IndexWriterConfig(Version.LUCENE_4_9, analyser)); + TaxonomyWriter taxo = new DirectoryTaxonomyWriter(getTaxoDirectory(), OpenMode.CREATE); + FacetsConfig config = new FacetsConfig(); + + writer.deleteAll(); + + Document doc1 = new Document(); + doc1.add(new TextField("name", "tutu is red", Store.YES)); + doc1.add(new FacetField("color", "red")); + doc1.add(new FacetField("category", "truc")); + doc1.add(new FacetField("birthdate", "1890")); + writer.addDocument(config.build(taxo, doc1)); + + Document doc2 = new Document(); + doc2.add(new TextField("name", "tutu is blue 2", Store.YES)); + doc2.add(new FacetField("color", "blue")); + doc2.add(new FacetField("category", "machin")); + doc2.add(new FacetField("birthdate", "1955")); + writer.addDocument(config.build(taxo, doc2)); + + Document doc3 = new Document(); + doc3.add(new TextField("name", "tutu is blue", Store.YES)); + doc3.add(new FacetField("color", "blue")); + doc3.add(new FacetField("category", "bidule")); + doc3.add(new FacetField("birthdate", "1984")); + writer.addDocument(config.build(taxo, doc3)); + + writer.close(); + taxo.close(); + } + + public static void search() throws IOException, ParseException { + + // opening a lucene index + IndexReader indexReader = DirectoryReader.open(getIndexDirectory()); + IndexSearcher searcher = new IndexSearcher(indexReader); + TaxonomyReader taxoReader = new DirectoryTaxonomyReader(getTaxoDirectory()); + FacetsConfig config = new FacetsConfig(); + + // create query + QueryParser parser = new QueryParser(Version.LUCENE_4_9, "name", analyser); + Query q = parser.parse("tutu"); + + // perform search + FacetsCollector facetsCollector = new FacetsCollector(); + //FacetsCollector.search(searcher, q, 10, facetsCollector); + searcher.search(q, null, facetsCollector); + //TopScoreDocCollector topDocsCollector = TopScoreDocCollector.create(10, true); + //searcher.search(q, MultiCollector.wrap(topDocsCollector, facetsCollector)); + + Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, facetsCollector); + for (FacetResult facetResult : facets.getAllDims(10)) { + System.out.println("Facet : " + facetResult.dim + + " (total " + facetResult.childCount + ")"); + for (LabelAndValue labelAndValue : facetResult.labelValues) { + System.out.println(" - " + labelAndValue.label + " : " + labelAndValue.value); + } + } + + taxoReader.close(); + //searcher. + indexReader.close(); + } + +} Property changes on: testlucenefacets/src/main/java/org/nuiton/TestOnlyLuceneFacets.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: testlucenefacets/src/main/java/org/nuiton/TestRangeLuceneFacets.java =================================================================== --- testlucenefacets/src/main/java/org/nuiton/TestRangeLuceneFacets.java (rev 0) +++ testlucenefacets/src/main/java/org/nuiton/TestRangeLuceneFacets.java 2014-07-04 15:00:33 UTC (rev 723) @@ -0,0 +1,183 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 Codelutin, Chatellier Eric + * %% + * 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; + +import java.io.File; +import java.io.IOException; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.document.NumericDocValuesField; +import org.apache.lucene.document.TextField; +import org.apache.lucene.facet.FacetField; +import org.apache.lucene.facet.FacetResult; +import org.apache.lucene.facet.Facets; +import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsConfig; +import org.apache.lucene.facet.LabelAndValue; +import org.apache.lucene.facet.range.LongRange; +import org.apache.lucene.facet.range.LongRangeFacetCounts; +import org.apache.lucene.facet.taxonomy.TaxonomyReader; +import org.apache.lucene.facet.taxonomy.TaxonomyWriter; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader; +import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter; +import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexWriterConfig.OpenMode; +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.LockObtainFailedException; +import org.apache.lucene.store.NIOFSDirectory; +import org.apache.lucene.util.Version; + +/** + * See http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/contrib-... + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class TestRangeLuceneFacets { + protected static Analyzer analyser = new StandardAnalyzer(Version.LUCENE_4_9); + + public static void main(String... args) throws IOException, ParseException { + create(); + search(); + } + + /** + * Get lucene index directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getIndexDirectory() throws IOException { + File path = new File("/tmp/lucene/index"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + /** + * Get lucene taxo directory. + * + * @return lucene index directory + * @throws IOException + */ + protected static Directory getTaxoDirectory() throws IOException { + File path = new File("/tmp/lucene/taxo"); + Directory directory = new NIOFSDirectory(path); + return directory; + } + + public static void create() throws CorruptIndexException, LockObtainFailedException, IOException { + + IndexWriter writer = new IndexWriter(getIndexDirectory(), new IndexWriterConfig(Version.LUCENE_4_9, analyser)); + TaxonomyWriter taxo = new DirectoryTaxonomyWriter(getTaxoDirectory(), OpenMode.CREATE); + FacetsConfig config = new FacetsConfig(); + + writer.deleteAll(); + + Document doc1 = new Document(); + doc1.add(new TextField("name", "tutu is red", Store.YES)); + doc1.add(new FacetField("color", "red")); + doc1.add(new FacetField("category", "truc")); + doc1.add(new NumericDocValuesField("birthdate", 1890)); + writer.addDocument(config.build(taxo, doc1)); + + Document doc2 = new Document(); + doc2.add(new TextField("name", "tutu is blue 2", Store.YES)); + doc2.add(new FacetField("color", "blue")); + doc2.add(new FacetField("category", "machin")); + doc2.add(new NumericDocValuesField("birthdate", 1955)); + writer.addDocument(config.build(taxo, doc2)); + + Document doc3 = new Document(); + doc3.add(new TextField("name", "tutu is blue", Store.YES)); + doc3.add(new FacetField("color", "blue")); + doc3.add(new FacetField("category", "bidule")); + doc3.add(new NumericDocValuesField("birthdate", 1984)); + writer.addDocument(config.build(taxo, doc3)); + + writer.close(); + taxo.close(); + } + + public static void search() throws IOException, ParseException { + + // opening a lucene index + IndexReader indexReader = DirectoryReader.open(getIndexDirectory()); + IndexSearcher searcher = new IndexSearcher(indexReader); + TaxonomyReader taxoReader = new DirectoryTaxonomyReader(getTaxoDirectory()); + FacetsConfig config = new FacetsConfig(); + + // create query + QueryParser parser = new QueryParser(Version.LUCENE_4_9, "name", analyser); + Query q = parser.parse("tutu"); + + // perform search + FacetsCollector facetsCollector = new FacetsCollector(); + //FacetsCollector.search(searcher, q, 10, facetsCollector); + searcher.search(q, null, facetsCollector); + //TopScoreDocCollector topDocsCollector = TopScoreDocCollector.create(10, true); + //searcher.search(q, MultiCollector.wrap(topDocsCollector, facetsCollector)); + + //Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, facetsCollector); + Facets facets = new LongRangeFacetCounts("birthdate", facetsCollector, + new LongRange("Before 1900", 0, true, 1900, false), + new LongRange("1900 - 2000", 1900, true, 2000, false), + new LongRange("Past 2000", 2000, true, 9999, false)); + + + /*for (FacetResult facetResult : facets.getAllDims(10)) { + System.out.println("Facet : " + facetResult.dim + + " (total " + facetResult.childCount + ")"); + for (LabelAndValue labelAndValue : facetResult.labelValues) { + System.out.println(" - " + labelAndValue.label + " : " + labelAndValue.value); + } + }*/ + FacetResult facetResult = facets.getTopChildren(10, "birthdate"); + System.out.println("Facet : " + facetResult.dim + + " (total " + facetResult.childCount + ")"); + for (LabelAndValue labelAndValue : facetResult.labelValues) { + System.out.println(" - " + labelAndValue.label + " : " + labelAndValue.value); + } + + taxoReader.close(); + //searcher. + indexReader.close(); + } + +} Property changes on: testlucenefacets/src/main/java/org/nuiton/TestRangeLuceneFacets.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: testlucenefacets/src/main/resources/log4j.properties =================================================================== --- testlucenefacets/src/main/resources/log4j.properties (rev 0) +++ testlucenefacets/src/main/resources/log4j.properties 2014-07-04 15:00:33 UTC (rev 723) @@ -0,0 +1,7 @@ +# Global logging configuration +log4j.rootLogger=ERROR, stdout + +# Console output +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c:%L - %m%n Property changes on: testlucenefacets/src/main/resources/log4j.properties ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native
participants (1)
-
echatellier@users.nuiton.org