sintaxis DSL

Aprenda las notas organizadas por usted mismo en el capítulo de gramática DSL en la búsqueda distribuida del proyecto de pila de tecnología de microservicio SpringCloud, que es conveniente para la reconstrucción futura.

El proyecto involucra tecnología

  1. Los puntos de conocimiento están ordenados según el número de episodios, lo cual es conveniente para futuras búsquedas.
  2. Teniendo en cuenta que no es un método de red fijo, a veces WiFi, a veces puntos de acceso, la configuración de una IP estática provocará una reconfiguración después de cada cambio de red, por lo que el enrutamiento dinámico utilizado por la máquina virtual, cuando necesita ejecutar programas relacionados, la IP cambia y solo necesita ser modificado El RestHighLevelClient inicializado durante la prueba es suficiente.
  3. La enumeración de rutas de código es principalmente para revisión de seguimiento.
  4. La ruta del código para que RestClient manipule la biblioteca de índices E:\微服务\实用篇\day05-Elasticsearch01\资料\hotel-demo.

Artículos prácticos

  1. Sintaxis de consulta DSL (P101)
  2. Consultar todo : consulta todos los datos, para pruebas generales. Por ejemplo: match_all.
  3. Consulta de búsqueda de texto completo (texto completo) : use la palabra segmentador para segmentar el contenido de entrada del usuario y luego hágalo coincidir en la base de datos de índice invertido. Por ejemplo: match, multi_match; La diferencia entre los dos es que la coincidencia se consulta en función de un campo y multi_match se consulta en función de varios campos; cuantos más campos se incluyan en la consulta, peor será el rendimiento de la consulta.
  4. Consulta precisa : encuentre datos basados ​​en valores de entrada precisos, generalmente buscando palabras clave, numéricos, de fecha, booleanos y otros tipos de campos. Por ejemplo: ids, range, term;
  5. Consulta geográfica (geo) : consulta basada en la latitud y la longitud. Por ejemplo: geo_distance, geo_bounding_box.
  6. Consulta compuesta (compuesto) : la consulta compuesta puede combinar las diversas condiciones de consulta mencionadas anteriormente y combinar las condiciones de consulta. Por ejemplo: Boolean Query, function_score.
  7. Algoritmo de puntuación de relevancia (P105)
  8. TF-IDF : antes de elasticsearch5.0, crecerá cada vez más a medida que aumente la frecuencia de la palabra
  9. BM25 : después de elasticsearch5.0, aumentará con el aumento de la frecuencia de palabras, pero la curva de crecimiento tenderá a ser horizontal.
# 查询所有
GET /hotel/_search
{
	"query": {
		"match_all": {}
	}
}

# 全文检索 -- match查询(效率高)
GET /hotel/_search
{
	"query": {
		"match": {
			"all": "外滩如家"
		}
	}
}
# 全文检索 -- multi_match
GET /hotel/_search
{
	"query": {
		"multi_match": {
			"query": "外滩如家",
			"fields": ["brand", "name", "business"]
		}
	}
}

# 精确查询 -- term查询 
GET /hotel/_search
{
	"query": {
		"term": {
			"city": {
				"value": "上海"
			}
		}
	}
}
# 精确查询 -- range查询  范围
GET /hotel/_search
{
	"query": {
		"range": {
			"price": {
				"gte": 100,
				"lte": 300
			}
		}
	}
}

# 地理查询 -- distance查询
GET /hotel/_search
{
	"query": {
		"geo_distance": {
			"distance": "2km",
			"location": "31.21, 121.5"
		}
	}
}

# 复合查询 -- function_score   参加打分
# 给“如家”这个品牌的酒店靠前一点
GET /hotel/_search
{
	"query": {
		"function_score": {
			"query": {
				"match": {
					"all": "外滩"
				}
			},
			"functions": [    //算分函数
				{
					"filter": {    //条件
						"term": {
							"brand": "如家"
						}
					},
					"weight": 10   //算分权重
				}
			],
			"boost_mode": "sum"  //加权分式
		}
	}
}
# 复合查询 -- Boolean Query 
# must:必须匹配的条件,可以理解为“与”
# should:选择性匹配的条件,可以理解为“或”
# must_not:必须不匹配的条件,不参与打分 - 提高效率
# filter:必须匹配的条件,不参与打分 - 提高效率
# 搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店
GET /hotel/_search
{
	"query": {
		"bool": {
			"must": [
				{"match":{"name": "如家"}}
			],
			"must_not": [
				{"range":{"price":{"gt": 400}}}
			],
			"filter":[
				{"geo_distance": {
					"distance": "20km",
					"location": {
						"lat": 31.21,
						"lon": 121.5
					}
				}}
			]
		}
	}
}
  1. Procesamiento de resultados de búsqueda (P108)
  2. Clasificación : después de la clasificación, no se realiza una puntuación de correlación, lo que mejora la eficiencia de las consultas.
  3. Paginación : consulta todos los documentos y luego intercepta la posición del documento actual + el número de documentos mostrados; predeterminado top10, consulta más parámetros de modificación-desde, tamaño.
  4. Problema de paginación profunda : cuando se procesan los clústeres de ES, los resultados de todos los nodos se agregan, se ordenan en la memoria y se seleccionan los documentos correspondientes; si la cantidad de páginas de búsqueda es demasiado profunda o el conjunto de resultados (desde + tamaño) es más grande , el impacto en la memoria y la CPU El consumo también es mayor.
  5. es establece el límite superior del conjunto de resultados en 10000.
  6. Método de paginación (P109)
  7. from + size–Ventajas: Admite cambio de página aleatorio; Desventajas: Problema de paginación profunda. Escenario: búsqueda aleatoria de cambio de página de Baidu, Google, JD.com, etc.
  8. after search–Ventajas: sin límite superior de consulta (el tamaño de consulta de palabra no supera las 10 000), Desventajas: solo puede consultar hacia atrás página por página y no es compatible con el cambio de página aleatorio. Escenario: Búsqueda sin requisitos de cambio de página aleatorio, como pasar de página en un teléfono móvil.
  9. scroll: Ventajas: Sin límite superior de consulta (el tamaño de la consulta de palabras no supera las 10.000), Desventajas: Consumo de memoria adicional, los resultados de búsqueda no son en tiempo real, Escenario: Adquisición y migración de datos masivos. (obsoleto)
  10. Resaltar : Resalte las palabras clave de búsqueda en los resultados de búsqueda.
# 对酒店数据按照用户评价降序排序,评价相同的按照价格升序排序
GET /hotel/_search
{
	"query": {
		"match_all": {}
	},
	"sort": [
		{
			"score": "desc"
		},
		{
			"price": "asc"
		}
	]
}
# 对酒店数据数据按照你的位置坐标的距离升序排序
GET /hotel/_search
{
	"query": {
		"match_all": {}
	},
	"sort": [
		{
			"_geo_distance": {
				"location": {
					"lat": 31.034661,
					"lon": 121.612282
				},
				"order": "asc",
				"unit": "km"
			}
		}
	]
}

# 分页查询 -- from-分页当前的位置  size-显示文档的总数
GET /hotel/_search
{
	"query": {
		"match_all": {}
	},
	"sort":[
		{
			"price": "asc"
		}
	],
	"from": 0,
	"size": 10
}

# 高亮查询,默认情况下,ES搜索字段必须与高亮字段一致,可以将"require_field_match":"false"-关闭搜索字段和高亮字段匹配
GET /hotel/_search
{
	"query": {
		"match": {
			"all": "如家"
		}
	},
	"highlight":{
		"fields":{
			"name":{
				"require_field_match":"false"
			}
		}
	}
}
  1. RestClient Querying Documents : consulta de documentos mediante JavaRestClient. (P111)
  2. Pasos básicos: cree un objeto SearchRequest, prepare Request.source(), en el que se usa QueryBuilders para construir condiciones de consulta y luego pase el método query(), envíe la solicitud, obtenga el resultado, analice el resultado (consulte el Resultado JSON, desde el exterior hacia el interior, analice capa por capa).
  3. Búsqueda de texto completo : solo se necesitan QueryBuilders para crear condiciones.
  4. Destacado : el análisis de resultados destacados se refiere al resultado JSON y se analiza capa por capa.

->微服务技术栈DSL语法课程视频

https://www.bilibili.com/video/BV1LQ4y127n4?p=100

<-

记录每一个学习瞬间

Supongo que te gusta

Origin blog.csdn.net/qq_51601665/article/details/129675071
Recomendado
Clasificación