查看分词器
POST _analyze
{
"analyzer": "standard",
"text":"默认分词器"
}
analyzer :分词器类型
text :分词内容
QueryString查询
GET /dangdang/_search?q=*&sort=price:desc&size=5&from=5&_source=name,price
sort 字段 排序,默认升序,desc 降序
size 查询条数
from 从第几条开始, size 加 from 可以实现分页查询
_source 查询文档中的指定字段,多个字段逗号隔开
QueryDSL查询
GET /dangdang/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"name": {
"order": "desc"
}
},
{
"price": {
"order": "desc"
}
}
],
"size": 5,
"from": 5
, "_source": ["name","price"]
}
match_all 匹配所有文档,默认返回十条文档
sort 字段 排序
size 查询条数
from 从第几条开始, size 加 from 可以实现分页查询
_source 查询文档中的指定字段,多个字段逗号隔开
关键字查询(TERM查询)
GET /dangdang/_search
{
"query": {
"term": {
"字段名称": {
"value": "搜索条件"
}
}
}
}
示例:
GET /dangdang/_search
{
"query": {
"term": {
"name": {
"value": "think in java"
}
}
}
}
1.字段类型为text类型存储时会分词,只有text类型会分词
2.ES中默认使用strandard标准分词器进行分词,对英文进行单词分词,对中文进行单字分词
范围查询(range)
{
"query": {
"range": {
"字段名称": {
"gte": 10,
"lte": 20
}
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"range": {
"price": {
"gte": 10,
"lte": 20
}
}
}
}
gte 大于等于,gt 大于
lte 小于等于,lt 小于
前缀查询(prefix)
{
"query": {
"prefix": {
"字段名称": {
"value":"搜索条件"
}
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"prefix": {
"des": {
"value": "好"
}
}
}
}
通配符查询(wildcard)
{
"query": {
"wildcard": {
"字段名称": {
"value": "搜索条件"
}
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"wildcard":{
"des":{
"value": "好*"
}
}
}
}
一个 ? 只能匹配一个任意字符
[*] 匹配0到任意个
多id查询
{
"query": {
"ids": {
"values": ["_id", "_id", "_id"]
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"ids": {
"values": ["_pnSz3kByR1YFKCHyigv","AZkV0XkByR1YFKCHrymP"]
}
}
}
values 的值是每个文档的_id的值
布尔查询(bool)
{
"query": {
"bool": {
"must": {
//可以嵌套term、range、wildcard等查询
},
"must_not": {
//可以嵌套term、range、wildcard等查询
},
"should": {
//可以嵌套term、range、wildcard等查询
}
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"des": {
"value": "好"
}
}
}
],
"must_not": [
{
"range": {
"price": {
"gte": 10,
"lte": 20
}
}
}
],
"should": [
{
"term": {
"name": {
"value": "格林"
}
}
}
]
}
}
}
must 代表 &&
must_not 代表 !=
should 代表 ||
三种条件可以在查询中使用任意一种
高亮查询,对查询结果做二次渲染,不改变原始数据(highlight)
{
"query": {
"term": {
"field": {
"value": "测"
}
}
},
"highlight": {
"fields": {
"*": {}
},
"pre_tags": ["<span style='color:red'>"],
"post_tags": ["</span>"]
}
}
示例:
POST /dangdang/_search
{
"query": {
"term": {
"des": {
"value": "测"
}
}
},
"highlight": {
"fields": {
"des": {},
"name": {}
},
"pre_tags": ["<span style='color:red'>"],
"post_tags": ["</span>"]
}
}
POST /dangdang/_search
{
"query": {
"term": {
"des": {
"value": "测"
}
}
},
"highlight": {
"fields": {
"*": {}
},
"pre_tags": ["<span style='color:red'>"],
"post_tags": ["</span>"]
}
}
[*] 代表所有字段都要高亮显示,也可以把 * 改为某个字段名,只让某个字段或某几个字段高亮显示
pre_tags 高亮显示的前缀
post_tags 高亮显示的后缀
多字段查询(mulit_match)
{
"query": {
"multi_match":{
"query": "redis",
"fields": ["字段名称", "字段名称", ...]
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"multi_match": {
"query": "测试",
"fields": ["des"]
}
}
}
1.如果搜索的字段分词,会对query进行先分词,后搜索
2.如果搜索的字段不分词,会直接使用query整体进行该字段搜索
多字段查询,指定分词器(query_string)
{
"query": {
"query_string": {
"query": "redis",
"fields": ["字段名称", ...],
"analyzer": "分词器"
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"query_string": {
"query": "格林测",
"analyzer": "ik_max_word",
"fields": ["des"]
}
}
}
过滤查询(Filter Query)
POST /dangdang/_search
{
"query": {
"bool": {
"must": [
//查询条件
],
"filter": {
//查询条件
}
}
}
}
示例:
POST /dangdang/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"name": {
"value": "think in java"
}
}
}
],
"filter": {
"term": {
"des": "好"
}
}
}
}
}
或
GET /dangdang/_search
{
"query": {
"bool": {
"must": [
{"match_all": {}}
],
"filter": [
{
"terms": {
"des": [
"好"
]
}
},
{
"range": {
"price": {
"gte": 10,
"lte": 100
}
}
},
{
"exists": {
"field": "des"
}
}
]
}
}
}
在执行filter query和query时,先执行filter再执行query。
must和filter里的条件可以自由搭配