添加数据
PUT /test/_doc/1
{
"name": "张三",
"age": 15,
"desc": "知道的越多,不知道的更多",
"tag": [
"程序员",
"技术宅",
"抑郁"
]
}
PUT /test/_doc/2
{
"name": "李四",
"age": 22,
"desc": "学无止境",
"tag": [
"游戏狂",
"渣滓",
"阳光"
]
}
PUT /test/_doc/3
{
"name": "王五",
"age": 22,
"desc": "无法形容",
"tag": [
"旅游",
"画画",
"健身"
]
}
PUT /test/_doc/4
{
"name": "法外狂徒张三",
"age": 15,
"desc": "法外之地",
"tag": [
"唱歌",
"运动",
"游泳"
]
}
# 根据id查询某个数据信息
GET /test/_doc/1
复杂查询
模糊查询
简写的查询语句
select * from _doc where name="%李四%"
# 精确匹配
GET /test/_doc/_search?q=name:李四
# 模糊匹配(注意值的属性不能为keyword;keyword不支持分页)
GET /test/_doc/_search?q=name:五
完整的查询语句
GET test/_doc/_search
{
"query": {
"match": {
"name": "张三"
}
}
}
查询语句分析:
查询结果分析:
查询结果字段过滤
查询结果字段过滤
等同于select name,desc from _doc where name=“张三”
GET test/_doc/_search
{
"query": {
"match": {
"name": "张三"
}
},
"_source": ["name","desc"]
}
排序
select * from _doc where name=“张三” order by age desc
GET test/_doc/_search
{
"query": {
"match": {
"name": "张三"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
分页查询
limit
GET test/_doc/_search
{
"query": {
"match": {
"name": "张三"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 1
}
布尔值查询
多条件查询
must(and),所有条件都要符合 ; where name=“张三” and age=7
GET test/_doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "张三"
}
},
{
"match":{
"age": 7
}
}
]
}
}
}
should(or),满足其中一个条件 ; where name=“张三” or age=7
GET test/_doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "张三"
}
},
{
"match":{
"age": 7
}
}
]
}
}
}
must_not(not) 查询相反条件 ; where age!=7
GET test/_doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match":{
"age": 7
}
}
]
}
}
}
过滤器
GET test/_doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match":{
"age": 7
}
}
],
"filter":{
"range":{
"age":{
"gt":10,
"lt":20
}
}
}
}
}
}
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
匹配多个条件
GET test/_doc/_search
{
"query": {
"match": {
"tag":"运动 技术"
}
}
}
关于分词
- term ,直接查询精确的
- match,会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!|
test与keyword
test会被分词器解析;keyword不会被分词器解析
(即同一个词,与test类型 与 查询条件 只要有一个字匹配上就会查询出 模糊查询;
但是keyword 必须和 查询条件 一模一样才会被匹配上 精准查询)
查询高亮
GET test/_doc/_search
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}