【Lucene】lucene查询Query对象

PrefixQuery

前缀查询。

如 test* 会匹配出 test/tests/tester。

例如:目录(category)通常都体现一个层次结构,如/tec/it/java 或 /tec/it/db 或 /tec/it/java/jvm 等等目录,如果想要搜索某个目录(如/tec/it或者/tec/it/db),可以构造prefix query。

 

WildcardQuery

通配符查询。可以让我们使用不完整、缺少某些字母的项进行查询。

lucene有两个标准通配符:* 代表0个或多个字母,? 代表0个或者1个字母。

 

注意:如果以 * 开头,或者中间包含 * ,或者结尾包含 * (如果仅结尾包含,则prefix优先)则为wildcard。

 

FuzzyQuery

模糊查询。

编辑距离算法 : 决定索引中的项term与指定目标项之间的相似程度,计算从一个字符串转换到另一个字符串所需的最少插入、删除和替换的字母个数。(参见http://nemogu.iteye.com/blog/1518585

 

在lucene中,计算两个字符串间的相似度,使用了下面的计算公式:

 

 

1- distance / min(textLen, targetLen)

其中,distance就是上面的编辑距离算法算出的edit distance,textlen为字符串长度,targetlen为要匹配的字符串的长度。 从公式可以看出,相似度不仅跟编辑距离有关还与串的长度有关,相似度是个[0,1]之间的值,值越大,表明两者越匹配。

 

使用QueryParser.parse("abc~0.7")解析查询表达式   abc~0.7   ,会解析成FuzzyQuery,0.7为最小相似度。

 

 

PhraseQuery

在默认情况下,索引中会包含各个项Term的位置信息。

 

查询语句用双引号引起来,查询时项之间的距离会作为查询的一个约束条件。两个项位置之间所允许的最大距离称为slop,默认情况下,slop因子设置为0,即要求查询结果必须和输入的短语完全匹配。可以在查询表达式加上~n设置,如QueryParser.parse(“abc 123”~1);

 

 

 

BooleanQuery

 

 

你可能感兴趣的:(Lucene)