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

📄 testqueryparser.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* Tests to see that wild card terms are (or are not) properly	 * lower-cased with propery parser configuration	 */// First prefix queries:    // by default, convert to lowercase:    assertWildcardQueryEquals("Term*", true, "term*");    // explicitly set lowercase:    assertWildcardQueryEquals("term*", true, "term*");    assertWildcardQueryEquals("Term*", true, "term*");    assertWildcardQueryEquals("TERM*", true, "term*");    // explicitly disable lowercase conversion:    assertWildcardQueryEquals("term*", false, "term*");    assertWildcardQueryEquals("Term*", false, "Term*");    assertWildcardQueryEquals("TERM*", false, "TERM*");// Then 'full' wildcard queries:    // by default, convert to lowercase:    assertWildcardQueryEquals("Te?m", "te?m");    // explicitly set lowercase:    assertWildcardQueryEquals("te?m", true, "te?m");    assertWildcardQueryEquals("Te?m", true, "te?m");    assertWildcardQueryEquals("TE?M", true, "te?m");    assertWildcardQueryEquals("Te?m*gerM", true, "te?m*germ");    // explicitly disable lowercase conversion:    assertWildcardQueryEquals("te?m", false, "te?m");    assertWildcardQueryEquals("Te?m", false, "Te?m");    assertWildcardQueryEquals("TE?M", false, "TE?M");    assertWildcardQueryEquals("Te?m*gerM", false, "Te?m*gerM");//  Fuzzy queries:    assertWildcardQueryEquals("Term~", "term~0.5");    assertWildcardQueryEquals("Term~", true, "term~0.5");    assertWildcardQueryEquals("Term~", false, "Term~0.5");//  Range queries:    assertWildcardQueryEquals("[A TO C]", "[a TO c]");    assertWildcardQueryEquals("[A TO C]", true, "[a TO c]");    assertWildcardQueryEquals("[A TO C]", false, "[A TO C]");    // Test suffix queries: first disallow    try {      assertWildcardQueryEquals("*Term", true, "*term");      fail();    } catch(ParseException pe) {      // expected exception    }    try {      assertWildcardQueryEquals("?Term", true, "?term");      fail();    } catch(ParseException pe) {      // expected exception    }    // Test suffix queries: then allow    assertWildcardQueryEquals("*Term", true, "*term", true);    assertWildcardQueryEquals("?Term", true, "?term", true);  }    public void testLeadingWildcardType() throws Exception {    QueryParser qp = getParser(null);    qp.setAllowLeadingWildcard(true);    assertEquals(WildcardQuery.class, qp.parse("t*erm*").getClass());    assertEquals(WildcardQuery.class, qp.parse("?term*").getClass());    assertEquals(WildcardQuery.class, qp.parse("*term*").getClass());  }  public void testQPA() throws Exception {    assertQueryEquals("term term^3.0 term", qpAnalyzer, "term term^3.0 term");    assertQueryEquals("term stop^3.0 term", qpAnalyzer, "term term");        assertQueryEquals("term term term", qpAnalyzer, "term term term");    assertQueryEquals("term +stop term", qpAnalyzer, "term term");    assertQueryEquals("term -stop term", qpAnalyzer, "term term");    assertQueryEquals("drop AND (stop) AND roll", qpAnalyzer, "+drop +roll");    assertQueryEquals("term +(stop) term", qpAnalyzer, "term term");    assertQueryEquals("term -(stop) term", qpAnalyzer, "term term");        assertQueryEquals("drop AND stop AND roll", qpAnalyzer, "+drop +roll");    assertQueryEquals("term phrase term", qpAnalyzer,                      "term \"phrase1 phrase2\" term");    assertQueryEquals("term AND NOT phrase term", qpAnalyzer,                      "+term -\"phrase1 phrase2\" term");    assertQueryEquals("stop^3", qpAnalyzer, "");    assertQueryEquals("stop", qpAnalyzer, "");    assertQueryEquals("(stop)^3", qpAnalyzer, "");    assertQueryEquals("((stop))^3", qpAnalyzer, "");    assertQueryEquals("(stop^3)", qpAnalyzer, "");    assertQueryEquals("((stop)^3)", qpAnalyzer, "");    assertQueryEquals("(stop)", qpAnalyzer, "");    assertQueryEquals("((stop))", qpAnalyzer, "");    assertTrue(getQuery("term term term", qpAnalyzer) instanceof BooleanQuery);    assertTrue(getQuery("term +stop", qpAnalyzer) instanceof TermQuery);  }  public void testRange() throws Exception {    assertQueryEquals("[ a TO z]", null, "[a TO z]");    assertTrue(getQuery("[ a TO z]", null) instanceof ConstantScoreRangeQuery);    QueryParser qp = new QueryParser("field", new SimpleAnalyzer());	qp.setUseOldRangeQuery(true);    assertTrue(qp.parse("[ a TO z]") instanceof RangeQuery);        assertQueryEquals("[ a TO z ]", null, "[a TO z]");    assertQueryEquals("{ a TO z}", null, "{a TO z}");    assertQueryEquals("{ a TO z }", null, "{a TO z}");    assertQueryEquals("{ a TO z }^2.0", null, "{a TO z}^2.0");    assertQueryEquals("[ a TO z] OR bar", null, "[a TO z] bar");    assertQueryEquals("[ a TO z] AND bar", null, "+[a TO z] +bar");    assertQueryEquals("( bar blar { a TO z}) ", null, "bar blar {a TO z}");    assertQueryEquals("gack ( bar blar { a TO z}) ", null, "gack (bar blar {a TO z})");  }    /** for testing legacy DateField support */  private String getLegacyDate(String s) throws Exception {    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);    return DateField.dateToString(df.parse(s));  }  /** for testing DateTools support */  private String getDate(String s, DateTools.Resolution resolution) throws Exception {    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);    return getDate(df.parse(s), resolution);        }    /** for testing DateTools support */  private String getDate(Date d, DateTools.Resolution resolution) throws Exception {      if (resolution == null) {        return DateField.dateToString(d);            } else {        return DateTools.dateToString(d, resolution);      }    }    private String getLocalizedDate(int year, int month, int day, boolean extendLastDate) {    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);    Calendar calendar = Calendar.getInstance();    calendar.set(year, month, day);    if (extendLastDate) {      calendar.set(Calendar.HOUR_OF_DAY, 23);      calendar.set(Calendar.MINUTE, 59);      calendar.set(Calendar.SECOND, 59);      calendar.set(Calendar.MILLISECOND, 999);    }    return df.format(calendar.getTime());  }  /** for testing legacy DateField support */  public void testLegacyDateRange() throws Exception {    String startDate = getLocalizedDate(2002, 1, 1, false);    String endDate = getLocalizedDate(2002, 1, 4, false);    Calendar endDateExpected = Calendar.getInstance();    endDateExpected.set(2002, 1, 4, 23, 59, 59);    endDateExpected.set(Calendar.MILLISECOND, 999);    assertQueryEquals("[ " + startDate + " TO " + endDate + "]", null,                      "[" + getLegacyDate(startDate) + " TO " + DateField.dateToString(endDateExpected.getTime()) + "]");    assertQueryEquals("{  " + startDate + "    " + endDate + "   }", null,                      "{" + getLegacyDate(startDate) + " TO " + getLegacyDate(endDate) + "}");  }    public void testDateRange() throws Exception {    String startDate = getLocalizedDate(2002, 1, 1, false);    String endDate = getLocalizedDate(2002, 1, 4, false);    Calendar endDateExpected = Calendar.getInstance();    endDateExpected.set(2002, 1, 4, 23, 59, 59);    endDateExpected.set(Calendar.MILLISECOND, 999);    final String defaultField = "default";    final String monthField = "month";    final String hourField = "hour";    QueryParser qp = new QueryParser("field", new SimpleAnalyzer());        // Don't set any date resolution and verify if DateField is used    assertDateRangeQueryEquals(qp, defaultField, startDate, endDate,                                endDateExpected.getTime(), null);        // set a field specific date resolution    qp.setDateResolution(monthField, DateTools.Resolution.MONTH);        // DateField should still be used for defaultField    assertDateRangeQueryEquals(qp, defaultField, startDate, endDate,                                endDateExpected.getTime(), null);        // set default date resolution to MILLISECOND     qp.setDateResolution(DateTools.Resolution.MILLISECOND);        // set second field specific date resolution        qp.setDateResolution(hourField, DateTools.Resolution.HOUR);    // for this field no field specific date resolution has been set,    // so verify if the default resolution is used    assertDateRangeQueryEquals(qp, defaultField, startDate, endDate,             endDateExpected.getTime(), DateTools.Resolution.MILLISECOND);    // verify if field specific date resolutions are used for these two fields    assertDateRangeQueryEquals(qp, monthField, startDate, endDate,             endDateExpected.getTime(), DateTools.Resolution.MONTH);    assertDateRangeQueryEquals(qp, hourField, startDate, endDate,             endDateExpected.getTime(), DateTools.Resolution.HOUR);    }    public void assertDateRangeQueryEquals(QueryParser qp, String field, String startDate, String endDate,                                          Date endDateInclusive, DateTools.Resolution resolution) throws Exception {    assertQueryEquals(qp, field, field + ":[" + startDate + " TO " + endDate + "]",               "[" + getDate(startDate, resolution) + " TO " + getDate(endDateInclusive, resolution) + "]");    assertQueryEquals(qp, field, field + ":{" + startDate + " TO " + endDate + "}",               "{" + getDate(startDate, resolution) + " TO " + getDate(endDate, resolution) + "}");  }  public void testEscaped() throws Exception {    Analyzer a = new WhitespaceAnalyzer();        /*assertQueryEquals("\\[brackets", a, "\\[brackets");    assertQueryEquals("\\[brackets", null, "brackets");    assertQueryEquals("\\\\", a, "\\\\");    assertQueryEquals("\\+blah", a, "\\+blah");    assertQueryEquals("\\(blah", a, "\\(blah");    assertQueryEquals("\\-blah", a, "\\-blah");    assertQueryEquals("\\!blah", a, "\\!blah");    assertQueryEquals("\\{blah", a, "\\{blah");    assertQueryEquals("\\}blah", a, "\\}blah");    assertQueryEquals("\\:blah", a, "\\:blah");    assertQueryEquals("\\^blah", a, "\\^blah");    assertQueryEquals("\\[blah", a, "\\[blah");    assertQueryEquals("\\]blah", a, "\\]blah");    assertQueryEquals("\\\"blah", a, "\\\"blah");    assertQueryEquals("\\(blah", a, "\\(blah");    assertQueryEquals("\\)blah", a, "\\)blah");    assertQueryEquals("\\~blah", a, "\\~blah");    assertQueryEquals("\\*blah", a, "\\*blah");    assertQueryEquals("\\?blah", a, "\\?blah");    //assertQueryEquals("foo \\&\\& bar", a, "foo \\&\\& bar");    //assertQueryEquals("foo \\|| bar", a, "foo \\|| bar");    //assertQueryEquals("foo \\AND bar", a, "foo \\AND bar");*/    assertQueryEquals("\\a", a, "a");        assertQueryEquals("a\\-b:c", a, "a-b:c");    assertQueryEquals("a\\+b:c", a, "a+b:c");    assertQueryEquals("a\\:b:c", a, "a:b:c");    assertQueryEquals("a\\\\b:c", a, "a\\b:c");    assertQueryEquals("a:b\\-c", a, "a:b-c");    assertQueryEquals("a:b\\+c", a, "a:b+c");    assertQueryEquals("a:b\\:c", a, "a:b:c");    assertQueryEquals("a:b\\\\c", a, "a:b\\c");    assertQueryEquals("a:b\\-c*", a, "a:b-c*");    assertQueryEquals("a:b\\+c*", a, "a:b+c*");    assertQueryEquals("a:b\\:c*", a, "a:b:c*");    assertQueryEquals("a:b\\\\c*", a, "a:b\\c*");    assertQueryEquals("a:b\\-?c", a, "a:b-?c");    assertQueryEquals("a:b\\+?c", a, "a:b+?c");    assertQueryEquals("a:b\\:?c", a, "a:b:?c");    assertQueryEquals("a:b\\\\?c", a, "a:b\\?c");    assertQueryEquals("a:b\\-c~", a, "a:b-c~0.5");    assertQueryEquals("a:b\\+c~", a, "a:b+c~0.5");    assertQueryEquals("a:b\\:c~", a, "a:b:c~0.5");    assertQueryEquals("a:b\\\\c~", a, "a:b\\c~0.5");    assertQueryEquals("[ a\\- TO a\\+ ]", null, "[a- TO a+]");    assertQueryEquals("[ a\\: TO a\\~ ]", null, "[a: TO a~]");    assertQueryEquals("[ a\\\\ TO a\\* ]", null, "[a\\ TO a*]");    assertQueryEquals("[\"c\\:\\\\temp\\\\\\~foo0.txt\" TO \"c\\:\\\\temp\\\\\\~foo9.txt\"]", a,                       "[c:\\temp\\~foo0.txt TO c:\\temp\\~foo9.txt]");        assertQueryEquals("a\\\\\\+b", a, "a\\+b");        assertQueryEquals("a \\\"b c\\\" d", a, "a \"b c\" d");    assertQueryEquals("\"a \\\"b c\\\" d\"", a, "\"a \"b c\" d\"");    assertQueryEquals("\"a \\+b c d\"", a, "\"a +b c d\"");        assertQueryEquals("c\\:\\\\temp\\\\\\~foo.txt", a, "c:\\temp\\~foo.txt");        assertParseException("XY\\"); // there must be a character after the escape char        // test unicode escaping    assertQueryEquals("a\\u0062c", a, "abc");    assertQueryEquals("XY\\u005a", a, "XYZ");    assertQueryEquals("XY\\u005A", a, "XYZ");    assertQueryEquals("\"a \\\\\\u0028\\u0062\\\" c\"", a, "\"a \\(b\" c\"");        assertParseException("XY\\u005G");  // test non-hex character in escaped unicode sequence    assertParseException("XY\\u005");   // test incomplete escaped unicode sequence        // Tests bug LUCENE-800    assertQueryEquals("(item:\\\\ item:ABCD\\\\)", a, "item:\\ item:ABCD\\");    assertParseException("(item:\\\\ item:ABCD\\\\))"); // unmatched closing paranthesis     assertQueryEquals("\\*", a, "*");    assertQueryEquals("\\\\", a, "\\");  // escaped backslash        assertParseException("\\"); // a backslash must always be escaped  }  public void testQueryStringEscaping() throws Exception {    Analyzer a = new WhitespaceAnalyzer();    assertEscapedQueryEquals("a-b:c", a, "a\\-b\\:c");    assertEscapedQueryEquals("a+b:c", a, "a\\+b\\:c");    assertEscapedQueryEquals("a:b:c", a, "a\\:b\\:c");    assertEscapedQueryEquals("a\\b:c", a, "a\\\\b\\:c");    assertEscapedQueryEquals("a:b-c", a, "a\\:b\\-c");

⌨️ 快捷键说明

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