public virtual void TestWildcard()
{
AssertQueryEquals("term*", null, "term*");
AssertQueryEquals("term*^2", null, "term*^2.0");
AssertQueryEquals("term~", null, "term~0.5");
AssertQueryEquals("term~0.7", null, "term~0.7");
AssertQueryEquals("term~^2", null, "term~0.5^2.0");
AssertQueryEquals("term^2~", null, "term~0.5^2.0");
AssertQueryEquals("term*germ", null, "term*germ");
AssertQueryEquals("term*germ^3", null, "term*germ^3.0");
Assert.IsTrue(GetQuery("term*", null) is PrefixQuery);
Assert.IsTrue(GetQuery("term*^2", null) is PrefixQuery);
Assert.IsTrue(GetQuery("term~", null) is FuzzyQuery);
Assert.IsTrue(GetQuery("term~0.7", null) is FuzzyQuery);
FuzzyQuery fq = (FuzzyQuery) GetQuery("term~0.7", null);
Assert.AreEqual(0.7f, fq.MinSimilarity, 0.1f);
Assert.AreEqual(FuzzyQuery.defaultPrefixLength, fq.PrefixLength);
fq = (FuzzyQuery) GetQuery("term~", null);
Assert.AreEqual(0.5f, fq.MinSimilarity, 0.1f);
Assert.AreEqual(FuzzyQuery.defaultPrefixLength, fq.PrefixLength);
AssertParseException("term~1.1"); // value > 1, throws exception
Assert.IsTrue(GetQuery("term*germ", null) is WildcardQuery);
/* 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
Assert.Throws<ParseException>(() => AssertWildcardQueryEquals("*Term", true, "*term"));
Assert.Throws<ParseException>(() => AssertWildcardQueryEquals("?Term", true, "?term"));
// Test suffix queries: then allow
AssertWildcardQueryEquals("*Term", true, "*term", true);
AssertWildcardQueryEquals("?Term", true, "?term", true);
}