ElaticSearch中的常见查询(所有、分词、词条、模糊、范围、布尔查询)
有如下几种
- match_all 查询所有
- match 分词查询
- term 词条查询
- fuzzy 模糊查询
- range 范围查询
查询所有(match_all)
GET my_index/_search
{
"query": {
"match_all": {}
}
}
// 也可以省略成如下写法
GET my_index/_search
- query:代表查询对象
- match_all:代表查询所有文档
效果

分词查询(match)
match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间默认是or的关系
GET /my_index/_search
{
"query": {
"match": {
"title": "小米电视"
}
}
}
- title:字段名
- 小米电视:搜索条件

如果需要更精确的查找,希望多个词条之间的关系是and的关系,可以这样写
GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "小米电视",
"operator": "and"
}
}
}
}
这样就只有同时包含小米和电视的词条才会被搜索到

词条匹配 (term)
term词条查询,查询的是一个词条,不会被分词,可以是keyword类型的字符串、数值、或者text类型字段中分词得到的某个词条
GET my_index/_search
{
"query": {
"term": {
"price": 2999.00
}
}
}

模糊查询(fuzzy)
一个新的概念,叫做编辑距离,一个词条变为另一个词条需要修改的次数,比如,facebool要修改为facebook需要做的是把l修改为k,一次即可,编辑距离就是1
模糊查询允许用户查询内容与实际内容存在偏差,但是编辑距离不能超过2
GET my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "小米",
"fuzziness": 1
}
}
}
}
可以看到,结果中包含小米、大米都被搜索到了

范围查询(range)
range查询找出那些落在指定区间内的数字或者时间
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
GET my_index/_search
{
"query": {
"range": {
"price": {
"gte": 2000,
"lt": 3000
}
}
}
}

布尔查询(bool)
bool把各种其他查询通过must(与)、must_not(非)、should(或)的方式进行组合
GET my_index/_search
{
"query": {
"bool": {
"must": {
"match": {
"title": "小米"
}
},
"must_not": {
"match": {
"title": "电视"
}
}
}
}
}
要小米,但是不要电视


浙公网安备 33010602011771号