1.1Elasticsearch
索引
1.11创建索引
PUT /索引库名称
{
"settings": {
"number_of_shards": 3, //分片数量
"number_of_replicas": 2 //副本数量
}
}
1.12查看索引
GET /索引名称
1.13删除索引
delete /索引名称
映射
2.11创建映射
PUT /索引名称/_mapping/类型名称
{
"properties":{
"字段名":{
"type":"类型",
"index":true,
"store":true,
"analyzer":"分词器"
}
}
}
type:类型,可以是text、long、short、date、integer、object等
- String 分为2中 keyword和text keyword不可分词可参与聚合,text可分词,不可参与聚合
- Numerical:数值类型,分两类
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
- 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
- Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间
index:是否索引,默认为true。index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
store:是否存储,默认为false,如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,**store的默认值就是false
analyzer:分词器,这里的ik_max_word即使用ik分词器
2.12查看映射
GET /索引名称/_mapping
2.13新增数据(自动分配id)
POST /索引名称/数据名称
{
"key":"value"
}
例如:
POST /test/clazz
{
"title":"1901",
}
手动指定id
POST /test/clazzz/1
{
key:value
}
2.14删除数据
DELETE /索引库名称/id
删除所有
POST /索引库/数据名称/_delete_by_query
{
"query": {
"match_all":{}
}
}
查询
3.11.基本查询
GET /索引库名称/_search
{
"查询类型":{
"查询条件":"查询条件值"
}
}
查询类型:match_all (查询所有),match(匹配查询),term,terms,range
and关系
GET /索引库/_search
{
"query":{
"match":{
"title":"apple",
operator:"and",
minimum_should_match:75%
}
}
}
match 查询支持 minimum_should_match 最小匹配参数, 这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,更常用的做法是将其设置为一个百分数,因为我们无法控制用户搜索时输入的单词数量:
多字段查询(multi_match)
GET /test/_search
{
"multi_match": {
"query":"",
"field":["title","image","key"]
}
}
词条匹配(term)
GET /test/_search
{
"query":{
"term":{
price:1999
}
#多词条匹配
"terms":{
price:["500","1000","2000"]
}
}
}
结果过滤:(_source)
GET /test/_search
{
"srouce":["image","title"],#只显示image和title2个类字段的结果
"query":{
"match":{
"title":"最好"
}
}
}
指定includes和excludes
-
includes:来指定想要显示的字段
-
excludes:来指定不想要显示的字段
GET /test/_search
{
“source”:{
“excludes”:[“title”]//不包含title字段
}
}
4.高级查询
4.11布尔组合(bool)
bool把各种其它查询通过must(与)、must_not(非)、should(或)的方式进行组合
例如:
GET /cars/_search
{
"query": {
"bool":{
"should": [
{
"term": {
"price": {
"value": "80000"
}
}
},
{"range": {
"price": {
"gte": 10000,
"lte": 20000
}
}
}
]
}
}
}
4.12范围查询(range)
GET /test/_search
{
"query":{
"range":{
"price":{
"gt":200,
"lt":1000
}
}
}
}
操作符 说明
gt 大于
gte 大于等于
lt 小于
lte 小于等于
4.13:模糊查询(fuzzy)
GET /test/_search
{
"query":{
"fuzzy":{
"title":"appla"
}
}
}
条件查询中进行过滤
所有的查询都会影响到文档的评分及排名。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter方式:
GET /heima/_search
{
"query":{
"bool":{
"must":{ "match": { "title": "小米手机" }},
"filter":{
"range":{"price":{"gt":2000.00,"lt":3800.00}}
}
}
}
}
注意:filter中还可以再次进行bool组合条件过滤。
4.15排序
GET /test/_search
{
"query":{
"match":{
"title":"must"
}
},
"sort":{
"price":{
"order":"desc"
}
}
}