⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcomplexexplanations.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
字号:
package org.apache.lucene.search;/** * 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. */import org.apache.lucene.search.BooleanClause.Occur;import org.apache.lucene.search.spans.*;/** * TestExplanations subclass that builds up super crazy complex queries * on the assumption that if the explanations work out right for them, * they should work for anything. */public class TestComplexExplanations extends TestExplanations {  /**   * Override the Similarity used in our searcher with one that plays   * nice with boosts of 0.0   */  public void setUp() throws Exception {    super.setUp();    searcher.setSimilarity(createQnorm1Similarity());  }  // must be static for weight serialization tests   private static DefaultSimilarity createQnorm1Similarity() {    return new DefaultSimilarity() {        public float queryNorm(float sumOfSquaredWeights) {          return 1.0f; // / (float) Math.sqrt(1.0f + sumOfSquaredWeights);        }      };  }    public void test1() throws Exception {        BooleanQuery q = new BooleanQuery();        q.add(qp.parse("\"w1 w2\"~1"), Occur.MUST);    q.add(snear(st("w2"),                sor("w5","zz"),                4, true),          Occur.SHOULD);    q.add(snear(sf("w3",2), st("w2"), st("w3"), 5, true),          Occur.SHOULD);        Query t = new FilteredQuery(qp.parse("xx"),                                new ItemizedFilter(new int[] {1,3}));    t.setBoost(1000);    q.add(t, Occur.SHOULD);        t = new ConstantScoreQuery(new ItemizedFilter(new int[] {0,2}));    t.setBoost(30);    q.add(t, Occur.SHOULD);        DisjunctionMaxQuery dm = new DisjunctionMaxQuery(0.2f);    dm.add(snear(st("w2"),                 sor("w5","zz"),                 4, true));    dm.add(qp.parse("QQ"));    dm.add(qp.parse("xx yy -zz"));    dm.add(qp.parse("-xx -w1"));    DisjunctionMaxQuery dm2 = new DisjunctionMaxQuery(0.5f);    dm2.add(qp.parse("w1"));    dm2.add(qp.parse("w2"));    dm2.add(qp.parse("w3"));    dm.add(dm2);    q.add(dm, Occur.SHOULD);    BooleanQuery b = new BooleanQuery();    b.setMinimumNumberShouldMatch(2);    b.add(snear("w1","w2",1,true), Occur.SHOULD);    b.add(snear("w2","w3",1,true), Occur.SHOULD);    b.add(snear("w1","w3",3,true), Occur.SHOULD);    q.add(b, Occur.SHOULD);        qtest(q, new int[] { 0,1,2 });  }  public void test2() throws Exception {        BooleanQuery q = new BooleanQuery();        q.add(qp.parse("\"w1 w2\"~1"), Occur.MUST);    q.add(snear(st("w2"),                sor("w5","zz"),                4, true),          Occur.SHOULD);    q.add(snear(sf("w3",2), st("w2"), st("w3"), 5, true),          Occur.SHOULD);        Query t = new FilteredQuery(qp.parse("xx"),                                new ItemizedFilter(new int[] {1,3}));    t.setBoost(1000);    q.add(t, Occur.SHOULD);        t = new ConstantScoreQuery(new ItemizedFilter(new int[] {0,2}));    t.setBoost(-20.0f);    q.add(t, Occur.SHOULD);        DisjunctionMaxQuery dm = new DisjunctionMaxQuery(0.2f);    dm.add(snear(st("w2"),                 sor("w5","zz"),                 4, true));    dm.add(qp.parse("QQ"));    dm.add(qp.parse("xx yy -zz"));    dm.add(qp.parse("-xx -w1"));    DisjunctionMaxQuery dm2 = new DisjunctionMaxQuery(0.5f);    dm2.add(qp.parse("w1"));    dm2.add(qp.parse("w2"));    dm2.add(qp.parse("w3"));    dm.add(dm2);    q.add(dm, Occur.SHOULD);    BooleanQuery b = new BooleanQuery();    b.setMinimumNumberShouldMatch(2);    b.add(snear("w1","w2",1,true), Occur.SHOULD);    b.add(snear("w2","w3",1,true), Occur.SHOULD);    b.add(snear("w1","w3",3,true), Occur.SHOULD);    b.setBoost(0.0f);        q.add(b, Occur.SHOULD);        qtest(q, new int[] { 0,1,2 });  }    // :TODO: we really need more crazy complex cases.  // //////////////////////////////////////////////////////////////////  // The rest of these aren't that complex, but they are <i>somewhat</i>  // complex, and they expose weakness in dealing with queries that match  // with scores of 0 wrapped in other queries  public void testT3() throws Exception {    bqtest("w1^0.0", new int[] { 0,1,2,3 });  }  public void testMA3() throws Exception {    Query q=new MatchAllDocsQuery();    q.setBoost(0);    bqtest(q, new int[] { 0,1,2,3 });  }    public void testFQ5() throws Exception {    bqtest(new FilteredQuery(qp.parse("xx^0"),                             new ItemizedFilter(new int[] {1,3})),           new int[] {3});  }    public void testCSQ4() throws Exception {    Query q = new ConstantScoreQuery(new ItemizedFilter(new int[] {3}));    q.setBoost(0);    bqtest(q, new int[] {3});  }    public void testDMQ10() throws Exception {    DisjunctionMaxQuery q = new DisjunctionMaxQuery(0.5f);    q.add(qp.parse("yy w5^100"));    q.add(qp.parse("xx^0"));    q.setBoost(0.0f);    bqtest(q, new int[] { 0,2,3 });  }    public void testMPQ7() throws Exception {    MultiPhraseQuery q = new MultiPhraseQuery();    q.add(ta(new String[] {"w1"}));    q.add(ta(new String[] {"w2"}));    q.setSlop(1);    q.setBoost(0.0f);    bqtest(q, new int[] { 0,1,2 });  }    public void testBQ12() throws Exception {    // NOTE: using qtest not bqtest    qtest("w1 w2^0.0", new int[] { 0,1,2,3 });  }  public void testBQ13() throws Exception {    // NOTE: using qtest not bqtest    qtest("w1 -w5^0.0", new int[] { 1,2,3 });  }  public void testBQ18() throws Exception {    // NOTE: using qtest not bqtest    qtest("+w1^0.0 w2", new int[] { 0,1,2,3 });  }  public void testBQ21() throws Exception {    bqtest("(+w1 w2)^0.0", new int[] { 0,1,2,3 });  }  public void testBQ22() throws Exception {    bqtest("(+w1^0.0 w2)^0.0", new int[] { 0,1,2,3 });  }  public void testST3() throws Exception {    SpanQuery q = st("w1");    q.setBoost(0);    bqtest(q, new int[] {0,1,2,3});  }  public void testST6() throws Exception {    SpanQuery q = st("xx");    q.setBoost(0);    qtest(q, new int[] {2,3});  }  public void testSF3() throws Exception {    SpanQuery q = sf(("w1"),1);    q.setBoost(0);    bqtest(q, new int[] {0,1,2,3});  }  public void testSF7() throws Exception {    SpanQuery q = sf(("xx"),3);    q.setBoost(0);    bqtest(q, new int[] {2,3});  }    public void testSNot3() throws Exception {    SpanQuery q = snot(sf("w1",10),st("QQ"));    q.setBoost(0);    bqtest(q, new int[] {0,1,2,3});  }  public void testSNot6() throws Exception {    SpanQuery q = snot(sf("w1",10),st("xx"));    q.setBoost(0);    bqtest(q, new int[] {0,1,2,3});  }  public void testSNot8() throws Exception {    // NOTE: using qtest not bqtest    SpanQuery f = snear("w1","w3",10,true);    f.setBoost(0);    SpanQuery q = snot(f, st("xx"));    qtest(q, new int[] {0,1,3});  }  public void testSNot9() throws Exception {    // NOTE: using qtest not bqtest    SpanQuery t = st("xx");    t.setBoost(0);    SpanQuery q = snot(snear("w1","w3",10,true), t);    qtest(q, new int[] {0,1,3});  }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -