📄 testdisjunctionmaxquery.java
字号:
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 + -