solr:关于dismax的使用情况(转:https://my.oschina.net/momohuang/blog/145379)

首先说说 dismax这个功能,它是基于lucene的DisjunctionMaxQuery去 扩展的,就是说,实际上用到的就是DisjunctionMaxQuery的这个查询类。查询api,可以知道是 对查询的几个域中,取最大的打分,而不是想boolean查询那样,要几个域的查询的分数叠加。



1、
q.alt, 没有看明白

2、qf对默认查询增加权重比值,比如:fieldOne^1.9 fieldTwo fieldThree^5 ,值越大权重越大

也可以是  

1、bf内字段必须是索引的,该出填写的是查询函数   。提供一个强大的功能就是使用用户设置的公式来对文档的score进行计算。这里所说的公式也就是solr的function queries,使用bf参数来操作score。edismax支持boost参数来进行function query。可以使用bf或boost多次。bf的函数查看solr api文档http://wiki.apache.org/solr/FunctionQuery

最终的排序打分,可以根据 bf打分与 lucene的sorce 相加,得到最后打分

2、qf


3、mm ,
 mm=2 就是有两个符合搜索的词 就返回改条 .对应着lucene的类BooleanScorer2


eg:

性别:女  MUST
年龄:<25  SHOULD
胸围: >C should
收入: >10000 should

要符合两个条件才会被 hit,要不直接去掉


4、pf查询字段,   就是phrase fields的缩写,   这样在schema不用制定默认字段

5、ps,phrase slop, 坡度 ,相同于 编辑距离的值,

eg: document:"周杰伦“,query:”杰伦周“,这两个词,如果用 phrasequery,但 slop=2的时候,搜索不出来,当,slop=3的时候,可以搜索出来

6、qs

7、


8、tie:DisjunctionMaxQuery q = new DisjunctionMaxQuery(tie);

 这个查询是相当于布尔查询的  
不过里面的关系只能是should  
 最后的分数不是相加,而是取最大值 

9、bq,就是boost queries ,bq参数可以用来指定多个查询,类似于automatic phrase boost

当是多个查询的时候,就是 BooleanClause.Occur.SHOULD查询,只有仅有一个查询并且

 if (1.0f == f.getBoost() && f instanceof BooleanQuery)  的时候,才是保留着原先的查询。

具体见:DisMaxQParser

10、uf





随便说一下 各个Query的不同做法

1、TermQuery,只是简单的按term 去查询?

2、BooleanQuery,布尔查询 ,与或?

3、RangeQuery

4、PrefixQuery就是使用前缀来进行查找的。

5、多关键字的搜索—PhraseQuery

6、FuzzyQuery是一种模糊查询,它可以简单地识别两个相近的词语。

7、使用通配符搜索—WildcardQuery


8、DisjunctionMaxQuery

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值