【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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值