DisMax查询解析器
来源:互联网 发布:淘宝开店充话费赚钱吗 编辑:程序博客网 时间:2024/06/05 10:19
DisMax查询解析器设计的初衷是处理用户输入的简单短语(没有复杂语法),在多个根据不同含义使用不同权重的字段间进行搜索。另外还有额外的选项,使用户可以根据具体用例(根据用户的输入)影响打分。
总的来说,DisMax查询解析器比标准Solr查询请求更像Google的接口。对于许多付费应用,这种相似性使DisMax成为更加适当的查询解析器。她能够接收简单的语法,却很少发生错误。
DisMax查询解析器设计的初衷是处理用户输入的简单短语(没有复杂语法),在多个根据不同含义使用不同权重的字段间进行搜索。另外还有额外的选项,使用户可以根据具体用例(根据用户的输入)影响打分。
总的来说,DisMax查询解析器比标准Solr查询请求更像Google的接口。对于许多付费应用,这种相似性使DisMax成为更加适当的查询解析器。她能够接收简单的语法,却很少发生错误。
DisMax查询解析器支持非常简化的Lucene查询分析器语法的自己。在Lucene中,引用可以被用于group短语,+/-
可以被用于表示并
和或
。所有其他Lucene查询解析器的特殊字符(除了AND
和OR
)被舍弃,以便简化用户体验。DisMax查询解析器使用在DisMax查询多字段时的布尔表达式和指定加权来为用户构建更好的查询。也为Solr管理员对人工干预查询结果提供更好的查询、功能和过滤。搜有的这些参数都可以在solrconfig.xml
文件中指定默认参数,或通过Solr查询URL重写。
对DisMax这个名字感兴趣吗?DisMax代表 Maximum Disjunction(最优分析)。下面是对 Maximum Disjunction(最优分析) 或DisMax查询:
注:通过子查询生成文档集合,对所有子查询的文档赋最高分,对额外的匹配查询添加系数的查询。
记不记得住这个解释都无所谓,只要知道DisMax简单易用,并且接收任何输入但几乎不发生错误。
DisMax参数
除了公用的查询参数、高亮参数、和简单的层面分析参数,DisMax查询解析器还支持一下参数。就像是标准查询解析器,DisMax查询解析器支持在solrconfig.xml
中指定默认参数值,也支持在查询时通过请求参数指定参数值。
下面的章节详细解释这些参数。
q
q
参数定义了查询过程中的主查询结构。这个参数支持用户的原始输入。+/-
视为AND/OR
。在一对引号之间检索词(比如:”San Jose”)的被解析为短语。含有奇数个引号的等同于没有引号。
注:不支持通配符,比如*。
q.alt
当主参数q
没有输入或是空,q.alt
参数来定义查询()。q.alt
参数可以很方便的获取匹配数量(最好加上参数&rows=0
)。
qf(Query Fields)
qf
参数可以对一系列字段指定权重,用来提高或降低其在查询中的重要性。比如:qf="fieldOne^2.3 fieldTwo fieldThree^0.4"
指定fieldOne
权重为2.3,fieldTwo
使用默认权重(因为没有指定权重),fieldThree
权重为0.4。查询的时候,字段的重要性依次为fieldOne
> fieldTwo
> fieldThree
。
mm (Minimum Should Match)
执行查询时,Lucene/Solr可以识别三种查询规则:必须符合(且)、不符合(fei),以及可能符合(或称为应该符合,或)。默认情况下,q
中定义的短语如果没用+
或-
修饰,则应该符合“可能”规则(或)。当使用“可能”规则是,mm
可以指定必须匹配的最小数量。DisMax查询解析器提供了非常灵活的指定最小数字的方法。
下面的表格解析了mm
值的多种用法:
当需要指定mm
值时,需要注意下面几条:
- 当处理百分比是,在边缘情况下,使用负值可以用来指定不同的行为。当4条从句时,75%和-25%相同,但当5条从句时,75%意味着需要匹配3条,-25%意味着需要匹配4条。
- 如果计算出的结果是不需要匹配任何从句,通常布尔查询依然会生效。(因为布尔查询至少需要匹配一条可选从句)
- 无论计算出什么数值,Solr都将使用一个不大于可选字句数目且不小于1的值。换句话说,无论计算结果多大或多少,需要匹配的最小数都不会小于1或大于从句数。
- 当在多个进行不同配置的字段间查询时,可选从句的数目可能不同。在这种情况下,指定的
mm
值适用于可选从句最大数目。例如:如果一个可选从句被解析为一个字段是停用词,对于这个字段的可选数将比其他字段小。如果mm
被设置为100%,在该字段上,将不会匹配任何值,因为移除的从句认为不匹配。
mm
的默认值是100%,即必须匹配所有从句。
pf(Phrase Fields)
通过fq
和qf
参数确定匹配文档后,可以通过pf
参数提高q
参数中的所有检索词出现更加集中的文档分值。
使用格式与qf
参数格式相同:列出字段并修改每个字段的打分。
ps (Phrase Slop)
ps
指定一定数量的”phrase slop”,用于pf
参数指定的查询。”Phrase slop”是一个标志位需要移动多少距离到另外一个标志位的距离,用于匹配查询中指定的短语。
qs (Query Phrase Slop)
qs
是在用qf
参数定义的用户查询中指定明确指定短语查询中”slop”的数量。如上面所说,”Phrase slop”是一个标志位需要移动多少距离到另外一个标志位的距离,用于匹配查询中指定的短语。
tie (Tie Breaker)
tie
指定一个在DisMax查询中用来作为”tiebreaker”的浮点数(小于1)。
根据用户输入的检索词匹配多个字段,多于一个字段匹配重构。如果是遮阳,每个字段将根据他在这个字段的出现次数有不同的分值(相对于所有其他文件的每个文件)。tie
参数可以让你控制查询分值,来影响低分字段与高分字段。
数值”0.0”使查询成为”disjunction max query”,就是说,只有最高得分子查询影响最终得分。数值”1.0”使查询成为”disjunction sum query”,就是说,最大分子查询没有影响,最后的得分根据子查询的得分和来起作用。通常比较低的分作用最好,比如0.1。
bq (Boost Query)
bq
可以指定一个影响用户主查询分值的额外、可选的查询从句。比如,如果你想查询最新的文档:
q=cheesebq=date:[NOW/DAY-1YEAR TO NOW/DAY]
你可以指定一系列的bq
参数。如果你希望你的查询被解析成独立的查询从句,可以使用多个bq
参数。
bf (Boost Functions)
bf
参数指定将被用于构建将被添加到用户朱查询作为可选重聚影响分值的FunctionQueries的功能(带来可选的加权)。任何Solr内部函数都可以使用。比如:recip(rord(myfield),1,2,3)^1.5
。 bf
参数功能本质上是bq
参数混合{!func}
解析器的简写。
比如,如果你想展示最先的文件,可以使用下面两种方式中的任何一个:
bf=recip(rord(creationDate),1,1000,1000) ...or...bq={!func}recip(rord(creationDate),1,1000,1000)
示例
使用普通查询请求器,查询指定查询字段,查询单词”video”:
http://localhost:8983/solr/techproducts/select?q=video&fl=name+score
DisMax查询被设计为在文本、特征、名称、SKU、编号、manu和字段中获得更好的匹配,匹配名称、或字段的文档得分更高。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video
注意,这个例子也配置了一个默认的字段列表,可以在URL中重写。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&fl=*,score
你也可以重写每个字段的加权分值:
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&qf=features^20.0+text^0.3
指定某一字段匹配指定值的加权分:
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&bq=cat:electronics^5.0
另外一个示例是指定qt
参数是”instock”,稍有不同的配置选项,尤其当设置过滤器是inStock:true的。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&fl=name,score,inStockhttp://localhost:8983/solr/techproducts/select?defType=dismax&q=video&qt=instock&fl=name,score,inStock
另外一个很酷的功能是,对”BooleanQuery.minimumNumberShouldMatch”的强大支持,可以指定你想在用户查询中匹配多少检索词。这就允许灵活的错别字和部分匹配。对于dismax查询,一个和两个检索词的查询要求所有的可选子句匹配,但是三到五检索词的查询允许一个词不匹配。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipodhttp://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+gibberishhttp://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+apple
就像标准查询器一样,支持查看解析查询调试数据选项,并解释每个文档的得分。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+gibberish&debugQuery=truehttp://localhost:8983/solr/techproducts/select?defType=dismax&q=video+card&debugQuery=true
原文链接:The DisMax Query Parser
翻译:沉潜飞动
译文链接:DisMax查询解析器
- DisMax查询解析器
- Solr Dismax查询解析器-深入分析
- Solr的查询解析器DisMax Query Parser
- Solr的查询解析器The Extended DisMax Query Parser
- solr 自定义 dismax查询方式
- solr 自定义 dismax查询方式
- Dismax
- solr dismax
- eDisMax查询解析器
- 【MySQL】查询解析器
- Solr DisMax 分析
- Solr Dismax示例
- Lucence自定义查询解析器
- 3 查询:解析器和优化器
- Solr解析器通用的查询参数
- MySQL查询优化器工作原理解析
- Solr解析器通用的查询参数
- solr 标准查询解析器的加权
- Floyd算法
- Material Design 实现之 RecyclerView基本特性
- 关于v$backup_redolog中next_change#列
- 直接描述性编程——客户端飞机订票系统
- mysql学习笔记(3)
- DisMax查询解析器
- linux服务器部署项目
- 黑马程序员-----网络编程
- oracle11G静默安装过程——linux环境
- C# TCP/IP 连接实现数据收发 Demo (Visual Studio)
- 在写xml文件时,经常会跳出一些让人摸不着头脑的错误
- openfire编译
- Struts2+Hibernate整合应用开发步骤
- *p++和*++p的区别