查询索引下的全部数据

GET /book/_search
{
  "took" : 333,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "Bootstrap开发",
          "description" : "Bootstrap是由Twitter推出的一个前台页面开发css框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长css页面开发的程序人员)轻松的实现一个css,不受浏览器限制的精美界面css效果。",
          "studymodel" : "201002",
          "price" : 38.6,
          "timestamp" : "2019-08-25 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "bootstrap",
            "dev"
          ]
        }
      },
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "java编程思想",
          "description" : "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
          "studymodel" : "201001",
          "price" : 68.6,
          "timestamp" : "2019-08-25 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "java",
            "dev"
          ]
        }
      },
      {
        "_index" : "book",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "spring开发基础",
          "description" : "spring 在java领域非常流行,java程序员都在用。",
          "studymodel" : "201001",
          "price" : 88.6,
          "timestamp" : "2019-08-24 19:11:35",
          "pic" : "group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
          "tags" : [
            "spring",
            "java"
          ]
        }
      }
    ]

索引结果解析

took:耗费了几毫秒
timed_out:是否超时,这里是没有
_shards:到几个分片搜索,成功几个,跳过几个,失败几个。
hits.total:查询结果的数量,3个document
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的所有详细数据

简易的按条件查询

GET /book/_search?q=name:java


#按照结果降序 , "max_score" : null:不会计算分数
GET /book/_search?q=name:java&sort=price:desc

设置超时时间

GET /book/_search?timeout=10ms

全局设置:配置文件中设置 search.default_search_timeout:100ms。默认不超时。

GET /book/_search?timeout=0ms
设置超时时间是 0ms 也可以查询出来数据…

避免用户一直等待查询结果,过了超时时间可以返回已经查询完毕的数据 ,有几条给几条

es能做相近词匹配统计_大数据

multi-index搜索模式

x /_search:所有索引下的所有数据都搜索出来
/index1/_search:指定一个index,搜索其下所有的数据
/index1,index2/_search:同时搜索两个index下的数据
/index*/_search:按照通配符去匹配多个索引

应用场景:生产环境log索引可以按照日期分开。

log_to_es_20190910

log_to_es_20190911

log_to_es_20180910

简单分页

GET /book/_search?size=10

GET /book/_search?size=10&from=0

GET /book/_search?size=10&from=20

GET /book_search?from=0&size=3

DSL

查询全部 索引 排序

#查询所有
GET /book/_search
{
  "query": {"match_all": {}}
}

#排序
GET /book/_search
{
  "query": {
    "match": {
      "name": "java"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}


#指定字段
GET /book/_search
{
  "query": {"match_all": {}},
  "_source": ["name","price"]
}

练习

搜索需求:title必须包含elasticsearch,content可以包含elasticsearch也可以不包含,author_id必须不为111
bool查询包括 : must , should,must_not

es能做相近词匹配统计_elasticsearch_02

GET /website/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "title": "elasticsearch"
        }}
      ],
      "should": [
        {"match": {
          "content": "hadoop"
        }}
      ],
      "must_not": [
        {"match": {
          "author_id": 111
        }}
      ]
    }
  }
}


#qury+bool+must  = match 
GET /website/_search
{
  "query": {
    "match": {
      "title": "hadoop"
    }
  }
}

更为复杂的查询要求

es能做相近词匹配统计_大数据_03

# 匹配全部
GET /book/_search
{
  "query": {
    "match_all": {
      
    }
  }
}

#查询关键字段  java程序员 会被分为 java + 程序员两个字段
GET /book/_search
{
  "query": {
    "match": {
      "description": "java程序员"
    }
  }
}

#一个字段在两个属性中查询
GET /book/_search
{
  "query": {
    "multi_match": {
      "query": "java程序员",
      "fields": ["name","description"]
    }
  }
}

# 范围查询
GET /book/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 60,
        "lte": 70
      }
    }
  }
}

#不进行分词查询 java程序员不会被分为java 程序员   ,termquery
GET /book/_search
{
  "query": {
    "term": {
     "description": "java"
    }
  }
}

#term 多个字段不进行分词查询
GET /book/_search
{
  "query": {
    "terms": {
      "description": [
        "java",
        "spring"
      ]
    }
  }
}

#模糊查询 相似匹配 {jave-> java 然后再进行查询}
GET /book/_search
{
  "query": {
    "fuzzy": {
      "description": {
        "value": "jave"
      }
    }
  }
}

Filter 过滤器

让搜索参与结果集当中,但是你不想参与评分计算

将range 写入 must 中 符合 range范围的查询会参与结果评分之中
GET /book/_search
{
  "query": {
   "bool": {
     "must": [
       {"match": {
         "description": "java程序员"
       }},
       {
         "range": {
           "price": {
             "gte":60,
             "lte": 80
           }
         }
       }
     ]
   }
  }
}



#正确写法
GET /book/_search
{
  "query": {
   "bool": {
     "must": [
       {"match": {
         "description": "java程序员"
       }}
     ],
     "filter": {
       "range": {
         "price": {
           "gte": 50,
           "lte": 20
         }
       }
     }
   }
  }
}

filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常使用filter的数据
query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果

定位错误语法

GET /book/_validate/query?explain
{
  "query": {
    "mach": {
      "description": "java程序员"
    }
  }
}

只进行过滤不进行搜索

# query 下面增加filter 字段
GET /book/_search 
{
  "query": {
    "constant_score": {
      "filter" : {
            "term" : {
                "studymodel" : "201001"
            }
        }
    }
  }

GET /book/_search 
{
  "query": {
    "constant_score": {
      "filter" : {
            "term" : {
                "studymodel" : "201001"
            }
        }
    }
  },
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}

英文进行排序,但不加入索引

PUT /website 
{
  "mappings": {
  "properties": {
    "title": {
      "type": "text",
        "fielddata": "true"      
    },
    "content": {
      "type": "text"
    },
    "post_date": {
      "type": "date"
    },
    "author_id": {
      "type": "long"
    }
  }
 }
}

索引分批

GET /book/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "size": 3
}


{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAMOkWTURBNDUtcjZTVUdKMFp5cXloVElOQQ==",
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
     
    ]
  }
}


GET /_search/scroll
{
    "scroll": "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAMOkWTURBNDUtcjZTVUdKMFp5cXloVElOQQ=="
}