I. Introducción
función de búsqueda es una funcionalidad de aplicación muy común y de código abierto Elasticsearch elección para el motor de búsqueda de texto completo
Elasticsearch es un servicio distribuido la investigación del fondo basado en Lucene Lucene conjunto de herramientas de software de código abierto no está disponible directamente
pero elasticsearch equivalente de la misma se encapsula y proporciona API estilo reparador múltiples Shard (fragmentos) también proporciona una manera de garantizar la seguridad de datos función automática de resharding
GitHub y otros grandes sitios también utilizan Elasticsearch como su servicio de búsqueda
Elasticsearch puede buscar y analizar rápidamente grandes cantidades de almacenamiento de datos
En segundo lugar, la instalación
Instalación del estibador manera de
descargar por primera vez la imagen Elasticsearch
# 从阿里云的仓库拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/elasticsearch/elasticsearch:6.7.0
A continuación, el recipiente es comenzar
por defecto Elasticsearch 9200
puerto para la comunicación entre los nodos respectivos Elasticsearch la comunicación web el caso de un distribuidos 9300
puertos
# 启动容器
docker run -d -p 9200:9200 -p 9300:9300 --name ES01 02982be5777d
Luego acceder a la IP del navegador: 9200
Si hay datos sigue un comienzo exitoso:
Si el caso no puedan acceder al puerto 9200 aparece
ver otro blog que: solución perfecta para la instalación de la máquina virtual de error Elasticsearch: [1]: la memoria virtual de máximo áreas vm .max_map_count [65530] es demasiado baja, aumento
En tercer lugar, el uso
Elasticsearch es [ documento] por el
significado que se almacena en todo el objeto o documento
elasticsearch no sólo almacenar los documentos y los índices del contenido de cada documento para que pueda ser recuperada
estar en elasticsearch del documento de clasificación de recuperación está indexado y filtrar - - a las filas de los datos en lugar de sólo
la forma en que se trata de una forma completamente diferente de pensar es también datos Elasticsearch para apoyar la causa de la búsqueda de texto completo complejo
Elasticsearch usando JSON (JavaScript Object Notation) formato de serialización del documento como
serializado JSON como la mayoría de los lenguajes de programación soportados y se ha convertido en el formato estándar en el campo de NoSQL que sea sencillo y fácil de leer simple ventaja de peso ligero y multiplataforma
Conceptos básicos:
Los datos almacenados para llevar a cabo Elasticsearch llama [ índice ] pero antes de la indexación de un documento que necesitan para determinar dónde se almacena el documento
(índice aquí es el verbo
índice de un documento se almacena en un documento a un índice con el fin de recuperar y la consulta
es similar a las sentencias SQL la palabra clave INSERT)
Clusters pueden comprender una pluralidad de Elasticsearch [índice] correspondiente a cada índice puede comprender una pluralidad de [Tipo]
Estos diferentes tipos de almacenamiento con una pluralidad de [Documento] tienen cada uno una pluralidad de documento [Propiedades]
(Indexado aquí es un sustantivo como una base de datos relacional tradicional en la base de datos es un lugar para guardar el documento relacional)
Si el uso de MySQL para la comparación es:
- Elasticsearch de los índices corresponde a la de MySQL base de datos
- Elasticsearch el tipo equivalente de MySQL mesa
- Elasticsearch el documento equivalente a la de MySQL registro
- Elasticsearch de propiedad equivalente al de MySQL campo
1, CRUD
①, complemento
Para lograr Añadir realmente muy simple
necesidad acaba de enviar una PUT
solicitud al índice especificado para especificar el tipo de depósito en un documento
sintaxis:
PUT请求 ----> ip:端口/索引名称/类型名称/编号
contenido:
{
要添加的JSON数据
}
Ejemplo:
PUT请求 ----> ip:端口/zjitc/student/1
{
"id" : "1",
"name" : "陈涛"
}
②, get / consulta
La misma necesidad sólo se envía una GET
solicitud para obtener un documento especificado:
Sintaxis:
GET请求 ----> ip:端口/索引名称/类型名称/编号
Ejemplo:
GET请求 ----> ip:端口/zjitc/student/1
③, borrado
Enviar una DELETE
solicitud para eliminar un documento especifica
la sintaxis:
DELETE请求 ----> ip:端口/索引名称/类型名称/编号
Ejemplo:
DELETE请求 ----> ip:端口/zjitc/student/3
④, para determinar si existe
Enviar una HEAD
solicitud para determinar si la presencia de documento especificado:
Sintaxis:
HEAD请求 ----> ip:端口/索引名称/类型名称/编号
Ejemplo:
HEAD请求 ----> ip:端口/zjitc/student/3
Los datos no se devuelve si la presencia de los datos son devueltos 200
si no hay retorno404
⑤, actualizar
PUT
También se puede utilizar para actualizar el documento
sintaxis:
PUT请求 ----> ip:端口/索引名称/类型名称/编号
contenido:
{
JSON数据
}
Ejemplo:
PUT请求 ----> ip:端口/zjitc/student/1
{
"id" : "1",
"name" : "王王涛"
}
2, Búsqueda avanzada
①, Buscar Todos
Utilice _search
casos:
GET请求 ----> ip:端口/zjitc/student/_search
②, la condición de búsqueda
la sintaxis de línea de comandos
Utilice _search?q=属性名:属性值
casos:
GET请求 ----> ip:端口/zjitc/student/_search?q=id:2
Resultados similares se pueden clasificar según su relevancia Redis anotar SortedSet
Consulta Expresión Sintaxis
Búsqueda de peso ligero (sintaxis de línea de comandos) puede ser llevado a cabo fácilmente mediante el mando temporal de la búsqueda, pero tiene sus propias limitaciones
Elasticsearch proporciona un lenguaje de consulta poderoso y flexible llamado [ expresión de consulta ] que apoya la construcción de una más sólidas y complejas consultas
los términos de búsqueda individuales:
sintaxis:
POST请求 ----> ip:端口/索引名称/类型名称/_search
contenido:
{
"query" : {
"match" : {
"搜索条件key" : "搜索条件value"
}
}
}
Ejemplo:
POST请求 ----> /zjitc/student/_search
{
"query" : {
"match" : {
"id" : "1"
}
}
}
búsqueda compleja (búsqueda en varios criterios):
a resultados de la consulta de filtro mediante la adición de un filtro de
sintaxis:
POST请求 ----> ip:端口/索引名称/类型名称/_search
contenido:
{
"query" : {
"bool": {
"must": {
"match" : {
"首选搜索条件key" : "首选搜索条件value"
}
},
"filter": {
"range" : {
"次选搜索条件key" : { "判断符" : 次选搜索条件value }
}
}
}
}
}
Ejemplo:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"name" : "涛"
}
},
"filter": {
"range" : {
"num" : { "gt" : 1 }
}
}
}
}
}
③, búsqueda de texto completo
Mientras el campo de destino contiene el valor de la condición de búsqueda puede revisar la
sintaxis:
POST请求 ----> ip:端口/索引名称/类型名称/_search
contenido:
{
"query" : {
"match" : {
"搜索条件key" : "搜索条件value"
}
}
}
Ejemplo:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
④, buscar frase
La concordancia exacta serie de palabras o frases que
coincidir sólo contiene "la palabra 1" y "2 palabra" y ambos junto a la frase "la palabra 1 palabra 2" se registra en la forma de
la sintaxis:
POST请求 ----> ip:端口/索引名称/类型名称/_search
contenido:
{
"query" : {
"match_phrase" : {
"搜索条件key" : "搜索条件value"
}
}
}
Ejemplo:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match_phrase" : {
"hobby" : "watch TV"
}
}
}
En el ejemplo anterior coincidirá con los valores de los atributos adjuntos al documento ver la televisión manía
si el reloj con o no se corresponda con el televisor
⑤, destacando la búsqueda
En cada uno de los resultados de búsqueda de relieve algunos de los fragmentos de texto con el fin de permitir que el usuario sabe por qué el documento coinciden con la consulta
sintaxis:
POST请求 ----> ip:端口/索引名称/类型名称/_search
contenido:
{
"query" : {
"match_phrase" : {
"搜索条件key" : "搜索条件value"
}
},
"highlight": {
"fields" : {
"要高亮的属性名" : {}
}
}
}
Ejemplo:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match_phrase" : {
"name" : "涛"
}
},
"highlight": {
"fields" : {
"name" : {}
}
}
}