DCausse has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/341317 )
Change subject: Add support for SynonymQuery ...................................................................... Add support for SynonymQuery This lucene query was missed but it's now used by elasticsearch query builders. closes #28 Change-Id: I7e4e4b6de1b2c6808fe57351ee3406ecae58a44d --- M experimental-highlighter-lucene/src/main/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattener.java M experimental-highlighter-lucene/src/test/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattenerTest.java 2 files changed, 44 insertions(+), 26 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/search/highlighter refs/changes/17/341317/1 diff --git a/experimental-highlighter-lucene/src/main/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattener.java b/experimental-highlighter-lucene/src/main/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattener.java index 4ddc2e7..4a9ffc0 100644 --- a/experimental-highlighter-lucene/src/main/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattener.java +++ b/experimental-highlighter-lucene/src/main/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattener.java @@ -1,10 +1,5 @@ package org.wikimedia.highlighter.experimental.lucene; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queries.CommonTermsQuery; @@ -22,6 +17,7 @@ import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RegexpQuery; +import org.apache.lucene.search.SynonymQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.search.spans.SpanNearQuery; @@ -35,6 +31,11 @@ import org.apache.lucene.util.automaton.Automaton; import org.apache.lucene.util.automaton.LevenshteinAutomata; import org.apache.lucene.util.automaton.Operations; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * Flattens {@link Query}s similarly to Lucene's FieldQuery. @@ -144,6 +145,8 @@ flattenQuery((PrefixQuery) query, pathBoost, sourceOverride, reader, callback); } else if (query instanceof CommonTermsQuery) { flattenQuery((CommonTermsQuery) query, pathBoost, sourceOverride, reader, callback); + } else if (query instanceof SynonymQuery) { + flattenQuery((SynonymQuery) query, pathBoost, sourceOverride, reader, callback); } else if (!flattenUnknown(query, pathBoost, sourceOverride, reader, callback)) { Query newRewritten = rewriteQuery(query, pathBoost, sourceOverride, reader); if (newRewritten != query) { @@ -327,6 +330,13 @@ callback.flattened(query.getAutomaton(), pathBoost, source.hashCode()); } + protected void flattenQuery(SynonymQuery query, float pathBoost, Object sourceOverride, + IndexReader reader, Callback callback) { + for(Term t : query.getTerms()) { + callback.flattened(t.bytes(), pathBoost, sourceOverride); + } + } + protected void flattenQuery(PrefixQuery query, float pathBoost, Object sourceOverride, IndexReader reader, Callback callback) { flattenPrefixQuery(query.getPrefix().bytes(), pathBoost, sourceOverride, diff --git a/experimental-highlighter-lucene/src/test/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattenerTest.java b/experimental-highlighter-lucene/src/test/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattenerTest.java index ad93d7c..d0a8f9a 100644 --- a/experimental-highlighter-lucene/src/test/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattenerTest.java +++ b/experimental-highlighter-lucene/src/test/java/org/wikimedia/highlighter/experimental/lucene/QueryFlattenerTest.java @@ -1,25 +1,6 @@ package org.wikimedia.highlighter.experimental.lucene; -import static org.hamcrest.Matchers.not; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyFloat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.wikimedia.highlighter.experimental.lucene.LuceneMatchers.recognises; - -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - +import com.google.common.collect.Lists; import org.apache.lucene.analysis.core.KeywordAnalyzer; import org.apache.lucene.document.Field; import org.apache.lucene.document.TextField; @@ -37,6 +18,7 @@ import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RegexpQuery; +import org.apache.lucene.search.SynonymQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.Directory; @@ -48,7 +30,25 @@ import org.mockito.ArgumentCaptor; import org.wikimedia.highlighter.experimental.lucene.QueryFlattener.Callback; -import com.google.common.collect.Lists; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.hamcrest.Matchers.not; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyFloat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.wikimedia.highlighter.experimental.lucene.LuceneMatchers.recognises; public class QueryFlattenerTest extends LuceneTestCase { private final List<Closeable> toClose = new ArrayList<>(); @@ -204,6 +204,14 @@ verify(callback, never()).flattened(eq(baz.bytes()), anyFloat(), any(Object.class)); } + @Test + public void testSynonym() { + Callback callback = mock(Callback.class); + new QueryFlattener().flatten(new SynonymQuery(bar, baz), null, callback); + verify(callback).flattened(bar.bytes(), 1f, null); + verify(callback).flattened(baz.bytes(), 1f, null); + } + @SafeVarargs private final void flattenedToAutomatonThatMatches(Query query, Matcher<Automaton>... matchers) { Callback callback = mock(Callback.class); -- To view, visit https://gerrit.wikimedia.org/r/341317 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7e4e4b6de1b2c6808fe57351ee3406ecae58a44d Gerrit-PatchSet: 1 Gerrit-Project: search/highlighter Gerrit-Branch: master Gerrit-Owner: DCausse <dcau...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits