首先说说 dismax这个功能,它是基于lucene的DisjunctionMaxQuery去 扩展的,就是说,实际上用到的就是DisjunctionMaxQuery的这个查询类。查询api,能够知道是 对查询的几个域中,取最大的打分,而不是想boolean查询那样,要几个域的查询的分数叠加。 apache
一、q.alt, 没有看明白 api
二、qf对默认查询增长权重比值,好比:fieldOne^1.9 fieldTwo fieldThree^5 ,值越大权重越大 函数
也能够是 spa
一、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 相加,获得最后打分 索引
二、qf 文档
三、mm , mm=2 就是有两个符合搜索的词 就返回改条 .对应着lucene的类BooleanScorer2 get
eg: it
性别:女 MUST
年龄:<25 SHOULD
胸围: >C should
收入: >10000 should io
要符合两个条件才会被 hit,要不直接去掉
五、ps,phrase slop, 坡度 ,相同于 编辑距离的值,
eg: document:"周杰伦“,query:”杰伦周“,这两个词,若是用 phrasequery,但 slop=2的时候,搜索不出来,当,slop=3的时候,能够搜索出来
六、qs
七、
八、tie:DisjunctionMaxQuery q = new DisjunctionMaxQuery(tie);
九、bq,就是boost queries ,bq参数能够用来指定多个查询,相似于automatic phrase boost
当是多个查询的时候,就是 BooleanClause.Occur.SHOULD查询,只有仅有一个查询而且
if (1.0f == f.getBoost() && f instanceof BooleanQuery) 的时候,才是保留着原先的查询。
具体见:DisMaxQParser
十、uf
随便说一下 各个Query的不一样作法
一、TermQuery,只是简单的按term 去查询?
二、BooleanQuery,布尔查询 ,与或?
三、RangeQuery
四、PrefixQuery就是使用前缀来进行查找的。
五、多关键字的搜索—PhraseQuery
六、FuzzyQuery是一种模糊查询,它能够简单地识别两个相近的词语。
七、使用通配符搜索—WildcardQuery
八、DisjunctionMaxQuery