object数据类型
除了一些基本数据类型以外,要注意有一个
object
类型,即和json的数据类型。
大部分复杂的数据类型,都是以这个形式存在的
querry和filter的区别
都是删选数据,最明显的区别就是前者计算分数,而后者不进行计算。
我们要知道,在es进行查询的时候,他会根据相关度(匹配程度)进行一个展示的排序,而这部分的算法会消耗很大的一部分资源和速度。
由此,我们可以得出一个优化查询效率的办法,就是尽量做过滤先,然后查询,如果顺序不重要,可以对查询进行分数不计算的设置,这样可以大大加快查询效率。(查询的时候加"constant_score"
不计算分数)
GET /company/employee/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"age": {
"gte": 30
}
}
}
}
}
}
bool查询的相关度计算
很多时候我们会发现,
bool
查询出来的结果会与我们想要的结果的大相径庭,这是因为bool查询的相关度算法的问题。
bool
一般是由must
,must_not
,should
,filter
这些子查询组成
每个子查询都会计算一个document针对它的相关度分数,然后bool综合所有分数,合并为一个分数,当然filter是不会计算分数的
match query的再次学习
- 全文检索的时候,进行多个值的检索,有两种做法,match query;should
- match query 底层会自动转化成bool查询
- 控制搜索结果精准度:and operator,minimum_should_match