| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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. |
| */ |
| package org.apache.lucene.search.spans; |
| |
| |
| import java.io.IOException; |
| |
| import org.apache.lucene.document.Document; |
| import org.apache.lucene.document.Field; |
| import org.apache.lucene.index.DirectoryReader; |
| import org.apache.lucene.index.IndexWriter; |
| import org.apache.lucene.index.LeafReaderContext; |
| import org.apache.lucene.index.Term; |
| import org.apache.lucene.search.*; |
| import org.apache.lucene.store.Directory; |
| |
| /** |
| * TestExplanations subclass focusing on span queries |
| */ |
| public class TestSpanExplanations extends BaseExplanationTestCase { |
| private static final String FIELD_CONTENT = "content"; |
| |
| /* simple SpanTermQueries */ |
| |
| public void testST1() throws Exception { |
| SpanQuery q = st("w1"); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testST2() throws Exception { |
| SpanQuery q = st("w1"); |
| qtest(new BoostQuery(q, 1000), new int[] {0,1,2,3}); |
| } |
| public void testST4() throws Exception { |
| SpanQuery q = st("xx"); |
| qtest(q, new int[] {2,3}); |
| } |
| public void testST5() throws Exception { |
| SpanQuery q = st("xx"); |
| qtest(new BoostQuery(q, 1000), new int[] {2,3}); |
| } |
| |
| /* some SpanFirstQueries */ |
| |
| public void testSF1() throws Exception { |
| SpanQuery q = sf(("w1"),1); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testSF2() throws Exception { |
| SpanQuery q = sf(("w1"),1); |
| qtest(new BoostQuery(q, 1000), new int[] {0,1,2,3}); |
| } |
| public void testSF4() throws Exception { |
| SpanQuery q = sf(("xx"),2); |
| qtest(q, new int[] {2}); |
| } |
| public void testSF5() throws Exception { |
| SpanQuery q = sf(("yy"),2); |
| qtest(q, new int[] { }); |
| } |
| public void testSF6() throws Exception { |
| SpanQuery q = sf(("yy"),4); |
| qtest(new BoostQuery(q, 1000), new int[] {2}); |
| } |
| |
| /* some SpanOrQueries */ |
| |
| public void testSO1() throws Exception { |
| SpanQuery q = sor("w1","QQ"); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testSO2() throws Exception { |
| SpanQuery q = sor("w1","w3","zz"); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testSO3() throws Exception { |
| SpanQuery q = sor("w5","QQ","yy"); |
| qtest(q, new int[] {0,2,3}); |
| } |
| public void testSO4() throws Exception { |
| SpanQuery q = sor("w5","QQ","yy"); |
| qtest(q, new int[] {0,2,3}); |
| } |
| |
| |
| |
| /* some SpanNearQueries */ |
| |
| public void testSNear1() throws Exception { |
| SpanQuery q = snear("w1","QQ",100,true); |
| qtest(q, new int[] {}); |
| } |
| public void testSNear2() throws Exception { |
| SpanQuery q = snear("w1","xx",100,true); |
| qtest(q, new int[] {2,3}); |
| } |
| public void testSNear3() throws Exception { |
| SpanQuery q = snear("w1","xx",0,true); |
| qtest(q, new int[] {2}); |
| } |
| public void testSNear4() throws Exception { |
| SpanQuery q = snear("w1","xx",1,true); |
| qtest(q, new int[] {2,3}); |
| } |
| public void testSNear5() throws Exception { |
| SpanQuery q = snear("xx","w1",0,false); |
| qtest(q, new int[] {2}); |
| } |
| |
| public void testSNear6() throws Exception { |
| SpanQuery q = snear("w1","w2","QQ",100,true); |
| qtest(q, new int[] {}); |
| } |
| public void testSNear7() throws Exception { |
| SpanQuery q = snear("w1","xx","w2",100,true); |
| qtest(q, new int[] {2,3}); |
| } |
| public void testSNear8() throws Exception { |
| SpanQuery q = snear("w1","xx","w2",0,true); |
| qtest(q, new int[] {2}); |
| } |
| public void testSNear9() throws Exception { |
| SpanQuery q = snear("w1","xx","w2",1,true); |
| qtest(q, new int[] {2,3}); |
| } |
| public void testSNear10() throws Exception { |
| SpanQuery q = snear("xx","w1","w2",0,false); |
| qtest(q, new int[] {2}); |
| } |
| public void testSNear11() throws Exception { |
| SpanQuery q = snear("w1","w2","w3",1,true); |
| qtest(q, new int[] {0,1}); |
| } |
| |
| |
| /* some SpanNotQueries */ |
| |
| public void testSNot1() throws Exception { |
| SpanQuery q = snot(sf("w1",10),st("QQ")); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testSNot2() throws Exception { |
| SpanQuery q = snot(sf("w1",10),st("QQ")); |
| qtest(new BoostQuery(q, 1000), new int[] {0,1,2,3}); |
| } |
| public void testSNot4() throws Exception { |
| SpanQuery q = snot(sf("w1",10),st("xx")); |
| qtest(q, new int[] {0,1,2,3}); |
| } |
| public void testSNot5() throws Exception { |
| SpanQuery q = snot(sf("w1",10),st("xx")); |
| qtest(new BoostQuery(q, 1000), new int[] {0,1,2,3}); |
| } |
| public void testSNot7() throws Exception { |
| SpanQuery f = snear("w1","w3",10,true); |
| SpanQuery q = snot(f, st("xx")); |
| qtest(q, new int[] {0,1,3}); |
| } |
| public void testSNot10() throws Exception { |
| SpanQuery t = st("xx"); |
| SpanQuery q = snot(snear("w1","w3",10,true), t); |
| qtest(q, new int[] {0,1,3}); |
| } |
| |
| public void testExplainWithoutScoring() throws IOException { |
| SpanNearQuery query = new SpanNearQuery(new SpanQuery[]{ |
| new SpanTermQuery(new Term(FIELD_CONTENT, "dolor")), |
| new SpanTermQuery(new Term(FIELD_CONTENT, "lorem"))}, |
| 0, |
| true); |
| |
| try (Directory rd = newDirectory()) { |
| try (IndexWriter writer = new IndexWriter(rd, newIndexWriterConfig(analyzer))) { |
| Document doc = new Document(); |
| doc.add(newTextField(FIELD_CONTENT, "dolor lorem ipsum", Field.Store.YES)); |
| writer.addDocument(doc); |
| } |
| |
| try (DirectoryReader reader = DirectoryReader.open(rd)) { |
| IndexSearcher indexSearcher = newSearcher(reader); |
| SpanWeight spanWeight = query.createWeight(indexSearcher, ScoreMode.COMPLETE_NO_SCORES, 1f); |
| |
| final LeafReaderContext ctx = indexSearcher.getIndexReader().leaves().get(0); |
| Explanation explanation = spanWeight.explain(ctx, 0); |
| |
| assertEquals(0f, explanation.getValue()); |
| assertEquals("match spanNear([content:dolor, content:lorem], 0, true) in 0 without score", |
| explanation.getDescription()); |
| |
| } |
| } |
| } |
| } |