对查询进行一些简单筛选
GET [index]/_search
{
"query": {
"match_all": {}
},
"size": 1,
"from": 2,
"_source": "value",
"sort": {
"value": {
"order": "desc"
}
}
}
size 表示每一页总计数据条数,未指定时,默认值为10,from 表示从第几条数据开始看,0表示从第一条开始看。
如果要对查询结果进行排序处理,则需要用到 sort
当需要查询多个字段,可以使用 "_source": ["property", "value"] 来实现,当只查询某一个字段时,直接用 "_source": "value" 即可。
布尔查询
布尔查询是指使用布尔逻辑把基本查询组合成复杂查询("bool":表示条件,嵌套在"query"内部,表示查询内容需要满足的条件)。
"must":表示同时满足所有条件;
"should":表示只需满足其中一个条件即可;
"must_not":表示一个条件都不满足;
"match": 每一个条件用一个"match"单独表示。
GET [index]/_search
{
"query":{
"bool":{
"must": [{
"match":{
"productId": "waterLevel"
}
}],
"must_not":[{
"match":{
"deviceId": "waterLevel002"
},
"match":{
"deviceId": "waterLevel003"
}
}]
}
}
}
范围查询
范围查询用 filter (过滤器)- range。
gt,gte,lt,lte缩写的含义:【gt: greater than 大于】【gte: greater than or equal 大于等于】【lt: less than 小于】【lte: less than or equal 小于等于】。
GET [index]/_search
{
"query":{
"bool":{
"must": [{
"match":{
"productId": "waterLevel"
}
}],
"filter": {
"range": {
"value": {
"gte": 0.2,
"lte": 0.6
}
}
}
}
}
}
分词
分词是将文本转换成一系列单词的过程,也可以叫文本分析,在ES里面称为Analysis。
Es 内置分词器
- Standard Analyer 默认分词器,按词切分,小写处理
- Simple Analyer 按照非字母切分(符号被过滤),小写处理
- Stop Analyer 小写处理,停用过滤词(the, is , a)
- Whitespace Analyer 按照空格切分,不转小写
- Keyword Analyer 不分词,直接将输入当作输出
- Pattern Analyer 正则表达式,默认 \W+(非字符分隔)
- Language 提供30种分词器
- Customer Analyzer 自定义分词器
以类型keyword还是text为例,通过执行GET [index],可以看到每个属性都有个type,值为keyword、text等。
如果类型为keyword,则说明字段的存储并未进行分词操作,一般这种用于需要精确检索的字段。
如果类型为text,则说明字段存储时进行了分词操作,一般这种用于需要模糊检索的字段。
term、match和match_phrase
term:完全匹配,也即是精确查询,通俗的说就是搜索前不会再对搜索词进行分词拆解,如果搜索好几类词的公共部分,则这些词都会被搜索出来。虽然term不会对搜索词进行分词,但是包含搜索词的所有部分都会被查出来,并不需要搜索词和原始录入词完全一致。term并不能通过"terms":{[,]}来进行对由多个词构成的词组查询,这种写法实际达成的是只要满足其中一个就被查询出来的效果,如果要多个词组组合查询需要用"bool"和"must"结合查询
match:match和term的区别在于match在进行搜索时,会先进行分词拆分,然后再进行匹配,故原始字段只要包含搜索词中的一个分词结果就行
match_phrase:如果为短语搜索,要求所有的分词必须同时出现在文档中,同时要求位置也一致
待续。。。。。。