constant_score query
这个查询可以包装一个其他类型的查询。
TF:词项在文档中出现的频率。
当一个业务场景觉得 TF 不重要时,也就是说不关心 TF 对搜索结果排序的影响时,可以用这个来包裹查询语句。
eg:
bool query
bool query
可以将任意多个简单查询组装在一起。其有 4 个关键字,这4个关键字所描述的条件可以有一个或者多个(查询中,给的是数组,可以在里面写)
- must :文档必须匹配 该选项下的查询条件
- should: 可以匹配,也可以不匹配
- must-not: 必须不匹配
- filter:同 must,不同点在于不评分,只进行数据的过滤
eg:
查询 name 属性中必须包含 java,同时价格不在[0,30],info 属性 可以包含 “程序设计” 也可以不包含”程序设计”
minmum_should_match
最小匹配度,至少匹配多少个词
我们输入的关键词会被分词器分解成一个个词项,
如下:
正常情况下,这些词项之间是或的关系,也就是文档与任意一个词项匹配就会返回这个文档。
我们也可以设置成 与 的关系。
现在有这样一个需求,我们不想每个词都匹配,但是也不想只匹配一个词项就返回这个文档。只匹配一部分词项。
那就可以考虑用这个参数 :minmum_should_match
,最少匹配多少个单词
如下:
以上的,都可以用到 bool query 来实现。
GET books/_search
{
"query": {
"match": {
"name": "语言程序设计"
}
}
}
这个查询与下面的这个查询等价
在 bool 查询中引入这个minmum_should_match
参数
当 minmum_should_match
参数个数等于这个分词后的词项个数时,就可以看做各个词项之间是 与 的关系。
当 minmum_should_match
参数个数大于这个分词后的词项个数时,结果为空,什么也查不到。因为没有那么多个词项来匹配。