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

📄 testdisjunctionmaxquery.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        Hits h = s.search(q);        try {            assertEquals("3 docs should match " + q.toString(),                         3, h.length());            assertEquals("wrong first",  "d2", h.doc(0).get("id"));            float score0 = h.score(0);            float score1 = h.score(1);            float score2 = h.score(2);            assertTrue("d2 does not have better score then others: " +                       score0 + " >? " + score1,                       score0 > score1);            assertEquals("d4 and d1 don't have equal scores",                         score1, score2, SCORE_COMP_THRESH);        } catch (Error e) {            printHits("testSimpleTiebreaker",h);            throw e;        }    }    public void testBooleanRequiredEqualScores() throws Exception {        BooleanQuery q = new BooleanQuery();        {            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);            q1.add(tq("hed","albino"));            q1.add(tq("dek","albino"));            q.add(q1,BooleanClause.Occur.MUST);//true,false);            QueryUtils.check(q1,s);        }        {            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);            q2.add(tq("hed","elephant"));            q2.add(tq("dek","elephant"));            q.add(q2, BooleanClause.Occur.MUST);//true,false);           QueryUtils.check(q2,s);        }        QueryUtils.check(q,s);        Hits h = s.search(q);        try {            assertEquals("3 docs should match " + q.toString(),                         3, h.length());            float score = h.score(0);            for (int i = 1; i < h.length(); i++) {                assertEquals("score #" + i + " is not the same",                             score, h.score(i), SCORE_COMP_THRESH);            }        } catch (Error e) {            printHits("testBooleanRequiredEqualScores1",h);            throw e;        }    }    public void testBooleanOptionalNoTiebreaker() throws Exception {        BooleanQuery q = new BooleanQuery();        {            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.0f);            q1.add(tq("hed","albino"));            q1.add(tq("dek","albino"));            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);        }        {            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.0f);            q2.add(tq("hed","elephant"));            q2.add(tq("dek","elephant"));            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);        }        QueryUtils.check(q,s);        Hits h = s.search(q);        try {            assertEquals("4 docs should match " + q.toString(),                         4, h.length());            float score = h.score(0);            for (int i = 1; i < h.length()-1; i++) { /* note: -1 */                assertEquals("score #" + i + " is not the same",                             score, h.score(i), SCORE_COMP_THRESH);            }            assertEquals("wrong last", "d1", h.doc(h.length()-1).get("id"));            float score1 = h.score(h.length()-1);            assertTrue("d1 does not have worse score then others: " +                       score + " >? " + score1,                       score > score1);        } catch (Error e) {            printHits("testBooleanOptionalNoTiebreaker",h);            throw e;        }    }    public void testBooleanOptionalWithTiebreaker() throws Exception {        BooleanQuery q = new BooleanQuery();        {            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);            q1.add(tq("hed","albino"));            q1.add(tq("dek","albino"));            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);        }        {            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);            q2.add(tq("hed","elephant"));            q2.add(tq("dek","elephant"));            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);        }        QueryUtils.check(q,s);        Hits h = s.search(q);        try {            assertEquals("4 docs should match " + q.toString(),                         4, h.length());            float score0 = h.score(0);            float score1 = h.score(1);            float score2 = h.score(2);            float score3 = h.score(3);            String doc0 = h.doc(0).get("id");            String doc1 = h.doc(1).get("id");            String doc2 = h.doc(2).get("id");            String doc3 = h.doc(3).get("id");            assertTrue("doc0 should be d2 or d4: " + doc0,                       doc0.equals("d2") || doc0.equals("d4"));            assertTrue("doc1 should be d2 or d4: " + doc0,                       doc1.equals("d2") || doc1.equals("d4"));            assertEquals("score0 and score1 should match",                         score0, score1, SCORE_COMP_THRESH);            assertEquals("wrong third", "d3", doc2);            assertTrue("d3 does not have worse score then d2 and d4: " +                       score1 + " >? " + score2,                       score1 > score2);            assertEquals("wrong fourth", "d1", doc3);            assertTrue("d1 does not have worse score then d3: " +                       score2 + " >? " + score3,                       score2 > score3);        } catch (Error e) {            printHits("testBooleanOptionalWithTiebreaker",h);            throw e;        }    }    public void testBooleanOptionalWithTiebreakerAndBoost() throws Exception {        BooleanQuery q = new BooleanQuery();        {            DisjunctionMaxQuery q1 = new DisjunctionMaxQuery(0.01f);            q1.add(tq("hed","albino", 1.5f));            q1.add(tq("dek","albino"));            q.add(q1, BooleanClause.Occur.SHOULD);//false,false);        }        {            DisjunctionMaxQuery q2 = new DisjunctionMaxQuery(0.01f);            q2.add(tq("hed","elephant", 1.5f));            q2.add(tq("dek","elephant"));            q.add(q2, BooleanClause.Occur.SHOULD);//false,false);        }        QueryUtils.check(q,s);        Hits h = s.search(q);        try {            assertEquals("4 docs should match " + q.toString(),                         4, h.length());            float score0 = h.score(0);            float score1 = h.score(1);            float score2 = h.score(2);            float score3 = h.score(3);            String doc0 = h.doc(0).get("id");            String doc1 = h.doc(1).get("id");            String doc2 = h.doc(2).get("id");            String doc3 = h.doc(3).get("id");            assertEquals("doc0 should be d4: ", "d4", doc0);            assertEquals("doc1 should be d3: ", "d3", doc1);            assertEquals("doc2 should be d2: ", "d2", doc2);            assertEquals("doc3 should be d1: ", "d1", doc3);            assertTrue("d4 does not have a better score then d3: " +                       score0 + " >? " + score1,                       score0 > score1);            assertTrue("d3 does not have a better score then d2: " +                       score1 + " >? " + score2,                       score1 > score2);            assertTrue("d3 does not have a better score then d1: " +                       score2 + " >? " + score3,                       score2 > score3);        } catch (Error e) {            printHits("testBooleanOptionalWithTiebreakerAndBoost",h);            throw e;        }    }    /** macro */    protected Query tq(String f, String t) {        return new TermQuery(new Term(f, t));    }    /** macro */    protected Query tq(String f, String t, float b) {        Query q = tq(f,t);        q.setBoost(b);        return q;    }    protected void printHits(String test, Hits h) throws Exception {        System.err.println("------- " + test + " -------");        DecimalFormat f = new DecimalFormat("0.000000000");        for (int i = 0; i < h.length(); i++) {            Document d = h.doc(i);            float score = h.score(i);            System.err.println("#" + i + ": " + f.format(score) + " - " +                               d.get("id"));        }    }}

⌨️ 快捷键说明

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