/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.analyzer.analyzerdef;
import org.apache.lucene.analysis.ngram.EdgeNGramFilterFactory;
import org.apache.lucene.analysis.standard.StandardTokenizerFactory;
import org.hibernate.search.annotations.Analyzer;
import org.hibernate.search.annotations.AnalyzerDef;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Parameter;
import org.hibernate.search.annotations.TokenFilterDef;
import org.hibernate.search.annotations.TokenizerDef;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.spi.SearchIntegratorBuilder;
import org.hibernate.search.testsupport.TestForIssue;
import org.hibernate.search.testsupport.setup.SearchConfigurationForTest;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@TestForIssue(jiraKey = "HSEARCH-2606")
public class AnalyzerDefInvalidTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void shouldNotBePossibleToHaveTwoAnalyzerDefsWithTheSameName() throws Exception {
thrown.expect( SearchException.class );
thrown.expectMessage( "Conflicting usage of @Parameter annotation for parameter name: 'maxGramSize'. Can't assign both value '15' and '1'" );
SearchConfigurationForTest cfg = new SearchConfigurationForTest();
cfg.addClass( Sample.class );
new SearchIntegratorBuilder().configuration( cfg ).buildSearchIntegrator().close();
}
@Indexed
@AnalyzerDef(name = "ngram", tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), filters = {
@TokenFilterDef(factory = EdgeNGramFilterFactory.class, params = {
@Parameter(name = "maxGramSize", value = "1"),
@Parameter(name = "maxGramSize", value = "15") // Illegal: mentioned the same Parameter name again
})
})
static class Sample {
@DocumentId
long id;
@Field(analyzer = @Analyzer(definition = "ngram"))
String description;
}
}