comando de operação de sintaxe es

Investigar


#查询索引
GET person

#查询全部索引的状态数据
GET /_cat/indices?v

#查询
GET http://ip:端口/索引名称  # 查询单个索引信息
GET http://ip:端口/索引名称1,索引名称2...  # 查询多个索引信息
GET http://ip:端口/_all  # 查询所有索引信息

#查询索引user映射
GET user/_mapping

#查询user索引文档,指定id
GET /user/_doc/1

#查询user索引所有文档
GET /user/_search

adicionar à

#添加
PUT http://ip:端口/索引名称

#添加索引
PUT user

#创建索引并添加映射(推荐)
PUT /person1
{
    
    
  "mappings": {
    
    
    "properties": {
    
    
      "name": {
    
    
        "type": "text"
      },
      "age": {
    
    
        "type": "integer"
      }
    }
  }
}

#添加字段(属性)
PUT /person1/_mapping
{
    
    
  "properties": {
    
    
    "name": {
    
    
      "type": "text"
    },
    "age": {
    
    
      "type": "integer"
    },
    "createTime": {
    
    
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
  }
}
##如果需要用时间范围查询,必须要设置"type": "date""format"
#请注意,在设置日期映射时,建议使用Elasticsearch支持的日期格式,并根据需要选择正确的日期格式。此外,如果您已经创建了索引并且需要更新日期映射,可以使用Update Mapping API来更新。

#添加文档,指定id
POST /person/_doc/1
{
    
    
  "name":"张三",
  "age":18,
  "address":"北京"
}

#添加文档,不指定id
POST /person1/_doc/
{
    
    
  "name":"张三",
  "age":18,
  "address":"北京"
}

#字段"tel"不可以进行查询,不然会报错只因创建映射时"tel""index"false
{
    
    
    "user": {
    
    
        "mappings": {
    
    
            "properties": {
    
    
                "name": {
    
    
                    "type": "text"
                },
                "sex": {
    
    
                    "type": "keyword"
                },
                "tel": {
    
    
                    "type": "keyword",
                    "index": false
                }
            }
        }
    }
}



#实现模糊检索,类似于SQL中的like条件,这个需求我们使用wildcard类型字段来实现. 
对同一个字段即可实现模糊检索,也能实现分词检索(我们原来使用text类型字段+ik分词器实现),这两种检索应用于同一字段
定义字段 name:【使用示例,就是在已经固定的mapping映射上加属性,因为已经添加的属性不能修改,只能添加】
"name": {
    
    
	"type": "text",
	"fields": {
    
    
  		"wildcard": {
    
    
  		"type": "wildcard"
  		},
  		"ik": {
    
    
  		"type": "text",
  		"analyzer": "ik_max_word"
  		}
	}
}
#然后进行检索如下,可以同时对 name.wildcardname.ik 字段进行检索
{
    
    
	"query": {
    
    
		"multi_match": {
    
    
		"query": "查询关键词",
		"fields": ["name.wildcard", "name.ik"]
		}
	}
}
 




Rever

#局部更新
POST /user/_update/4
{
    
    
  "doc": {
    
    
    "email":"88886"
  }
}

#全量更新,存在就更新,不存在就创建
POST /user/_doc/4
{
    
    
   "name" : "王九",
   "sex" : "男性",
   "tel" : "99"
}


excluir

#删除索引
DELETE http://ip:端口/索引名称

#删除指定id文档
DELETE /person/_doc/1

#删除某个文档中的属性
POST user/_doc/1/_update
{
    
    
    "script" : "ctx._source.remove('new_field')"
}

# 按照查询条件进行删除
POST user/_delete_by_query
{
    
    
  "query":{
    
    
    "match_phrase":{
    
    
      "catagoryId": "1643191714195750913"
    }
  }
}

Consulta avançada de caminho ur

#查询name端包含王或者九的
GET /user/_search?q=name:王九

#URL带参数形式查询,这很容易让不善者心怀恶意,或者参数值出现中文会出现乱码情况。为了避免这些情况,我们可用使用带JSON请求体请求进行查询

Termo de consulta avançada

#term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解
GET user/_search
{
    
    
  "query": {
    
    
    "term": {
    
    
      "FIELD": {
    
    
        "value": "VALUE"
      }
    }
  }
}


#terms里的[ ] 多个是或者的关系,只要满足其中一个词就可以
GET user/_search
{
    
    
  "query": {
    
    
    "terms": {
    
    
      "FIELD": [
        "VALUE1",
        "VALUE2"
      ]
    }
  }
}

#terms里的[ ] 多个是或者的关系,只要满足其中一个词就可以。想要通知满足两个词的话,就得使用boolmust来做
GET user/_search
{
    
    
  "query": {
    
    
    "bool": {
    
    
      "must": [
        {
    
    "term": {
    
    
          "FIELD": {
    
    
            "value": "VALUE"
          }
        }},
        {
    
    
          "term": {
    
    
            "FIELD": {
    
    
              "value": "VALUE"
            }
          }
        }
      ]
    }
  }
}

Correspondência de consulta avançada

#查找所有文档内容
GET user/_search
{
    
    
	"query":{
    
    
		"match_all":{
    
    }
	}
}


# 查询全部文档指定字段
GET user/_search
{
    
    
	"query":{
    
    
		"match_all":{
    
    }
	},
	"_source":["FIELD"]
}





#match进行搜索的时候,会先进行分词拆分,拆完后,再来匹配
GET user/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "FIELD": "TEXT"
    }
  }
}

#match_phrase 称为短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致
GET user/_search
{
    
    
"query": {
    
    
  "match_phrase": {
    
    
    "FIELD": "PHRASE"
  }
}


# 上面的 MatchQuery 有一个短板,假如用户输入了某关键字,我们在查找的时候并不知道他输入的是 name 还是 description,这时我们用什么都不合适,而 MultiQuery 的出现解决了这个问题,他可以通过 fields 属性来设置多个域联合查找
GET user/_search
{
    
    
    "query": {
    
    
        "multi_match": {
    
    
            "query": "Spring开发",
            "minimum_should_match": "70%",
            "fields": ["name", "description"]
        }
    }
}
}


# 在多域联合查询的时候,可以通过 boost 来设置某个域在计算得分时候的比重,比重越高的域当他符合条件时计算的得分越高,相应的该记录也更靠前。通过在 fields 中给相应的字段用 ^权重倍数来实现
GET user/_search
{
    
    
    "query": {
    
    
        "multi_match": {
    
    
            "query": "Spring开发",
            "minimum_should_match": "70%",
            "fields": ["name^10", "description"]
        }
    }
}
}


Consulta multicondição, must é equivalente a && no banco de dados, should é equivalente a || no banco de dados

#must相当于数据库的&&
GET user/_search
{
    
    
	"query":{
    
    
		"bool":{
    
    
			"must":[{
    
    
				"match":{
    
    
					"name":"小王"
				}
			},{
    
    
				"match":{
    
    
					"age":18
				}
			}]
		}
	}
}


#should相当于数据库的||
GET user/_search
{
    
    
	"query":{
    
    
		"bool":{
    
    
			"should":[{
    
    
				"match":{
    
    
					"name":"小王"
				}
			},{
    
    
				"match":{
    
    
					"age":18
				}
			}]
		}
	}
}

Se quisermos realizar uma consulta de segmentação de palavras em alguns campos e uma consulta precisa em outros campos ao mesmo tempo, precisamos usar a consulta booleana para alcançá-la. A consulta booleana corresponde à consulta BooleanQuery do Lucene. Ela implementa a combinação de várias consultas. Existem três parâmetros opcionais: must: o documento deve corresponder às condições de consulta incluídas em must, que é equivalente a "AND" should: o documento deve corresponder ao que deve include Uma ou mais das condições de consulta, equivalente a "OR" must_not: o documento não pode corresponder às condições de consulta incluídas em must_not, equivalente a "NOT"

GET user/_search
{
    
    
    "query": {
    
    
        "bool": {
    
     // 布尔查询
            "must": [ // 查询条件 must 表示数组中的查询方式所规定的条件都必须满足
                {
    
    
                    "multi_match": {
    
    
                        "query": "王小妹",
                        "minimum_should_match": "50%",
                        "fields": [
                            "name^10",
                            "title"
                        ]
                    }
                },
                {
    
    
                    "term": {
    
    
                        "address": "广州"
                    }
                }
            ]
        }
    }
}

consulta de paginação

GET user/_search
{
    
    
	"query":{
    
    
		"match_all":{
    
    }
	},
	"from":0,
	"size":2
}

Classificação de consulta, suporte para adição de classificação a palavra-chave, data, flutuante e outros tipos. Campos de tipo de texto não podem ser classificados. O texto não pode ser classificado porque será dividido em palavras

{
    
    
	"query":{
    
    
		"match_all":{
    
    }
	},
	"sort": [
    {
    
    
      "age": {
    
    
        "order": "desc"
      }
    }
  ]
}

consulta de intervalo

GET user/_search
{
    
    
	"query":{
    
    
		"bool":{
    
    
			"should":[{
    
    
				"match":{
    
    
					"name":"小王"
				}
			},{
    
    
				"match":{
    
    
					"age":18
				}
			}],
			"filter": [
			  {
    
    "range": {
    
    
			    "age": {
    
    
			      "gte": 10,
			      "lte": 20
			    }
			  }}
			]
		}
	}
}

Pesquisa de Texto Completo

{
    
    
	"query":{
    
    
		"match":{
    
    
			"name" : "王妹"
		}
	}
}

Consulta de realce, os dados realçados são em si um campo no documento e o campo será retornado a você apenas na forma de destaque.

ES fornece um atributo de destaque, que está no mesmo nível da consulta

GET user/_search
{
    
    
  "query": {
    
    
    "match_phrase": {
    
    
      "name": "张三"
    }
  },
  "highlight": {
    
    
    "fields": {
    
    
      "name": {
    
    }
    },
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fragment_size": 10
  }
    }
}


#全文高亮检索
GET person1/_search
{
    
    
  "query": {
    
    
    "multi_match": {
    
    
      "query": "广州",
      "fields": []
    }
  },
  "highlight": {
    
    
    "fields": {
    
    
      "*": {
    
    }
    }
  }
}

fragment_size: Especifique quantos caracteres serão exibidos nos dados realçados;
pre_tag: Especifique a tag de prefixo, como <font color="red">
post_tags: Especifique a tag de sufixo, como </font>
field: Especifique qual campo é o campo destacado

A definição de filtro de consulta é filtrar os dados com base nos resultados da consulta original, portanto, a etapa de recalcular a pontuação é omitida, o que é mais eficiente. E fácil de armazenar em cache. Recomenda-se usar filtros o máximo possível para implementar consultas ou usar filtros e consultas juntos. Os filtros são usados ​​em consultas booleanas e as consultas de filtro podem ter o mesmo efeito que as consultas de recuperação. A diferença é que as consultas de filtragem não são pontuadas e os resultados podem ser armazenados em cache, enquanto as consultas de recuperação são pontuadas, mas os resultados não são armazenados em cache. Geralmente, as consultas de filtro não são usadas diretamente, mas após a recuperação de determinados dados. O seguinte é para filtrar com base nos resultados da pesquisa

GET user/_search
{
    
    
    "query": {
    
    
        "bool": {
    
    
            "must": [
                {
    
    
                    "multi_match": {
    
    
                        "query": "王小妹",
                        "minimum_should_match": "50%",
                        "fields": [
                            "name^10",
                            "title"
                        ]
                    }
                }
            ],
            "filter": [
                {
    
    
                    // 过滤条件:studymodel 必须是 201001
                    "match": {
    
    "address": "广州"}
                },
                {
    
    
                    // 过滤条件:年龄 >=10 <=100
                    "range": {
    
    "age": {
    
    "gte": 10,"lte": 100}}
                }
            ]
        }
    }
}

consulta de grupo

GET user/_search
{
    
    
  "aggs": {
    
    
    "gg_gl": {
    
    
      "terms": {
    
    
        "field": "age"
      }
    }
  },
  "size": 0
}

Aninhamento de mapeamento avançado** [O tipo de campo é definido como palavra-chave e não será segmentado por palavra]

#嵌套节点下面新增字段
PUT /user/_mapping

{
    
    
    "properties": {
    
    
        "school": {
    
    
            "type": "keyword",
            "norms": false,
            "doc_values": false
        },
        "teacher": {
    
    
            "type": "nested",
            "properties": {
    
    
                "rightStatus": {
    
    
                    "type": "keyword",
                    "norms": false,
                    "doc_values": false
                },
                "rightCurrTime": {
    
    
                    "type": "keyword",
                    "norms": false,
                    "doc_values": false
                }
            }
        }
    }
}

#Fechar e abrir o índice (fechar o índice é liberar a memória, persistir os dados no disco rígido e não pode ler e gravar o índice fechado)

POST http://ip:端口/索引名称/_close  

POST http://ip:端口/索引名称/_open ```

O tokenizador IK possui dois modos de segmentação: modo ik_max_word e ik_smart

O sistema Linux instala o separador de palavras, o primeiro docker instala es

entre em es

docker exec -it elasticsearch /bin/bash

Execute a instalação do separador de palavras ik (observe que o separador de palavras instalado precisa ser consistente com a versão es, se for inconsistente, altere o número da versão do separador de palavras ik)

./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip

Depois que a instalação for bem-sucedida, você poderá ver o arquivo ik no plug-in do volume es do host e, em seguida, deverá reiniciar o contêiner es

docker restart elasticsearch 

Opere no kibana e veja o resultado do tokenizer**【Observe que se a letra em inglês estiver em maiúscula, ela ficará minúscula depois de usar o tokenizer padrão】

GET /_analyze
{
    
    
  "analyzer": "ik_smart",
  "text": "东哥是前端大佬"
}


#结果
{
    
    
  "tokens" : [
    {
    
    
      "token" : "东",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
    
    
      "token" : "哥",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
    
    
      "token" : "是",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
    
    
      "token" : "前端",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
    
    
      "token" : "大佬",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}

tipo de dados ES

Agregação: equivalente a soma (soma) em mysql
text: segmentação de palavras, sem agregação
palavra-chave: sem segmentação de palavras, todo o conteúdo como uma entrada, suporta agregação inteiro
: tipo de valor
booleano:
binário booleano: binário
integer_range, float_range, long_range, double_range, date_range : tipo de intervalo
data: data
[] Aninhado: aninhado (para matrizes de objetos JSON Objetos JSON do tipo matriz): array
{ } Objeto: objeto (para objetos JSON únicos objeto JSON único): objeto

GET: usado para obter recursos
POST: usado para criar novos recursos (também pode ser usado para atualizar recursos)
PUT: usado para atualizar recursos
DELETE: usado para excluir recursos

  • Um índice no ES 5.x pode ter vários tipos.
  • Um índice no ES 6.x pode ter apenas um tipo.
  • Depois do ES 7.x, o conceito de tipo será gradualmente removido. A operação atual não é mais usada. O _doc padrão
    #Visualize o mapeamento de campo no índice. Se a versão es for 7, você pode usar o seguinte comando e adicionar formato após o mapeamento? =json&include_type_name=true
    GET /user/_doc/_mapping?format=json&include_type_name=true

Acho que você gosta

Origin blog.csdn.net/qq_19891197/article/details/129505835
Recomendado
Clasificación