ES最关键的地方就在于查询
GET 索引名称/_search
GET 索引名称/_search/q=键:值
#例,只会去date里查询符合2022-06-01的
GET product/_search?q=date:2022-06-01
#查询XX索引,从位置0开始,查询十条,以price排desc的序。
GET 索引名称/_search?from=0&size=10&sort=:price:desc
#相当于在所有有索引的字段查询2022-06-01
GET product/_search?q=2022-06-01
GET 索引名称/_mapping
关于查询,理解match和term的区别是非常重要的。
match和term最大的差别在于,查询条件是否分词。
举例说明
“xiaomi phone”,如果使用match查询是会分成两个词:xiaomi+phone,如果使用的是term则查询条件不分词:xiaomi phone。
match查询的是key对应的value,这里的key和value都会分词。
GET test/_search
{"query": {"match": {"key": "value"}}
}
查询全部
GET test/_search
{"query": {"match_all": {}}
}
多字段查询,查询name或type中包含phone的数据
GET test/_search
{"query": {"multi_match": {"query": "phone","fields": ["name","type"]}}
}
这个是最复杂的match查询,比较像term但是又和term不一样,以ni shi zhu为查询条件举例,ni shi zhu会被分词为"ni",“shi”,“zhu”,但是分词具有顺序,对应的value中必须包含这三个分词+顺序没有被打乱+中间没有插入任何词
GET test/_search
{"query": {"match_phrase": {"word": "ni shi zhu"}}
}
这里的查询条件不会分词,会按"ni shi zhu"直接在word里进行查询。
GET test/_search
{"query": {"term": {"word": "ni shi zhu"}}
}
#数据类型如下
"text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}
}
对于text类型的字段,如果是"ni shi zhu",则会被分解为"ni",“shi”,"zhu"进行保存,只有在keyword字段才会查询到全称(keyword默认之为256,小于256字段长度取所有值,大于256则只截取前256个字符。)
GET test/_search
{"query": {"term": {"text.keyword": "xiaomi nfc phone"}}
}
#查询字段为FIELD,值为VALUE1和VALUE2的数据。
GET test/_search
{"query": {"terms": {"FIELD": ["VALUE1","VALUE2"]}}
}
#查询字段为FIELD,大于等于10并小于等于20的所有数据。
#gt=大于 gte=大于等于
#lt=小于 lte=小于等于
GET test/_search
{"query": {"range": {"FIELD": {"gte": 10,"lte": 20}}}
}
filter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响。
query,会计算每个document相对于搜索条件的相关度,并按照相关度进行排序。
一般来说,如果你是在进行搜索,需要将最匹配搜索条件的数据先返回,那么用query;如果你只是要根据一些条件筛选出一部分数据,不关注排序,那么使用filter。
filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的机制,自动cache最常使用filter的数据。
query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果。
bool可以组合多个查询条件,bool查询是采用more_matches_is_better的机制,因此满足Must和should子句的文档会合并起来计算分值。
must中可以使用term或者match,这里主要列举写法,而且写法基本上一样,只是修改了不同的条件。
GET test/_search
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}}]}}
}GET test/_search
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}
GET test/_search
{"query": {"bool": {"should": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}
GET test/_search
{"query": {"bool": {"must_not": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}
GET test/_search
{"query": {"bool": {"filter": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}
GET test/_search
{"query": {"bool": {"minimum_should_match": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}