Elasticsearch 全文匹配查询,elasticsearch全文
dis_max查询
相比使用bool查询,我们可以使用dis_max查询(Disjuction
Max Query)。Disjuction的意思"OR"(而Conjunction的意思是"AND"),因此Disjuction Max Query的意思就是返回匹配了任何查询的文档,并且分值是产生了最佳匹配的查询所对应的分值:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Brown fox" }},
{ "match": { "body": "Brown fox" }}
]
}
}
}
可以发现,两份文档的分值是一模一样的。
我们期望的是同时匹配了title字段和body字段的文档能够拥有更高的排名,但是结果并非如此。需要记住:dis_max查询只是简单的使用最佳匹配查询子句得到的_score。
tie_breaker
但是,将其它匹配的查询子句考虑进来也是可能的。通过指定tie_breaker参数:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Quick pets" }},
{ "match": { "body": "Quick pets" }}
],
"tie_breaker": 0.3
}
}
}现在文档2的分值比文档1稍高一些。
tie_breaker参数会让dis_max查询的行为更像是dis_max和bool的一种折中。它会通过下面的方式改变分值计算过程:
- 取得最佳匹配查询子句的
_score。 - 将其它每个匹配的子句的分值乘以
tie_breaker。 - 将以上得到的分值进行累加并规范化。
通过tie_breaker参数,所有匹配的子句都会起作用,只不过最佳匹配子句的作用更大。
/caiyun_index/spider_result/_search post
{
"query": {"multi_match": {
"query": "test",
"type": "best_fields",
"fields": [
"title",
"文本",
"url",
"附件.pdf",
"附件.others",
"附件.picture"
],
"tie_breaker": 0.3
}
}
}
。。。。。。。。。。。。。。。注意上面的查询要是字符类型 field中都是字符类型,int 类型就是int 类型,不能再field 包含多个类型
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。