package uk.co.flax.luwak; import java.io.IOException; import com.google.common.collect.Iterables; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.search.similarities.ClassicSimilarity; import org.apache.lucene.search.similarities.Similarity; import org.junit.Test; import uk.co.flax.luwak.matchers.ScoringMatch; import uk.co.flax.luwak.matchers.ScoringMatcher; import uk.co.flax.luwak.presearcher.MatchAllPresearcher; import uk.co.flax.luwak.queryparsers.LuceneQueryParser; import static org.assertj.core.api.Assertions.assertThat; /** * Copyright (c) 2014 Lemur Consulting Ltd. * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class TestSimilarities { public static final Analyzer ANALYZER = new WhitespaceAnalyzer(); @Test public void testNonStandardSimilarity() throws IOException, UpdateException { try (Monitor monitor = new Monitor(new LuceneQueryParser("field"), new MatchAllPresearcher())) { monitor.update(new MonitorQuery("1", "test")); Similarity similarity = new ClassicSimilarity() { @Override public float tf(float freq) { return 1000f; } }; InputDocument doc = InputDocument.builder("doc") .addField("field", "this is a test", new StandardAnalyzer()).build(); DocumentBatch batch = new DocumentBatch.Builder() .add(doc) .setSimilarity(similarity) .build(); DocumentBatch standardBatch = new DocumentBatch.Builder() .add(doc) .setSimilarity(new ClassicSimilarity()) .build(); Matches<ScoringMatch> standard = monitor.match(standardBatch, ScoringMatcher.FACTORY); Matches<ScoringMatch> withSim = monitor.match(batch, ScoringMatcher.FACTORY); assertThat(Iterables.getFirst(standard.getMatches("doc"), null).getScore()) .isEqualTo(Iterables.getFirst(withSim.getMatches("doc"), null).getScore() / 1000); } } }