minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
No desenvolvimento e operação diários do Elasticsearch (ES), frequentemente encontramos cenários em que consultas semelhantes precisam ser executadas com frequência. Estas consultas podem envolver vários campos, condições de filtro e análise agregada devido à complexidade da lógica de negócios. Para otimizar essas operações e melhorar a eficiência do desenvolvimento, o Elasticsearch disponibiliza a função de templates de busca. Este artigo explica como usar os modelos de pesquisa do Elasticsearch para reutilizar e compartilhar consultas.
No desenvolvimento diário, embora a maioria das consultas possa ser relativamente simples, em alguns cenários de negócios complexos (como finanças, medicina, etc.), uma pesquisa pode precisar passar ou retornar dezenas de campos e envolver condições de filtragem e análise de agregação complexas. . Neste ponto, escrever manualmente cada consulta não é apenas ineficiente, mas também sujeito a erros. Os modelos de pesquisa são como procedimentos armazenados ou funções no MySQL. Eles só precisam ser definidos uma vez, e a função de pesquisa pode ser concluída posteriormente no código chamando o modelo e passando parâmetros, o que melhora muito a eficiência do desenvolvimento e a flexibilidade da consulta.
A forma básica do modelo de pesquisa é definir um objeto JSON contendo condições de consulta e passar_search/template
Chamadas de API. Por exemplo:
GET /index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "真正的数值",
"size": 100
}
}
Neste exemplo,{{kw}}
e{{size}}
é uma variável no modelo, passadaparams
Os objetos passam valores específicos.
toJSON
A forma é caracterizada porsource
Use strings para definir e caracteres de escape são obrigatórios. Por exemplo:
GET cars/_search/template
{
"source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
"params": {
"parameter": {
"remark": "真正的数值"
}
}
}
usarjoin
O método pode concatenar os elementos do array em uma string para condições de consulta. Por exemplo:
GET index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": ["大众", "标致", "奔驰", "宝马"]
}
}
Você pode definir valores padrão para parâmetros no modelo. Se o parâmetro não for passado na chamada, o valor padrão será usado. Por exemplo:
GET index_name/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}
Para reutilizar o template, podemos salvá-lo no Elasticsearch. Ao especificar o nome do modelo, é conveniente chamá-lo repetidamente mais tarde. Por exemplo:
POST _scripts/my_test_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"field_name": "{{kw}}"
}
}
}
}
}
Ao chamar o modelo, passeid
Para especificar um modelo específico e passar os parâmetros correspondentes. Por exemplo:
GET index_name/_search/template
{
"id": "my_test_template",
"params": {
"kw": "自定义template的参数值"
}
}
As informações do modelo definido podem ser consultadas por meio de solicitações GET, por exemplo:
GET _scripts/my_test_template
Se precisar excluir um modelo definido, você pode usar uma solicitação DELETE, por exemplo:
DELETE _scripts/my_test_template
Elasticsearch fornece_render/template
API para validar o modelo.