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": "电视" } } } } }
要小米,但是不要电视