Elasticsearch – Consulta DSL
>br>
Em Elasticsearch, a pesquisa é feita usando a consulta baseada no JSON. Uma consulta é constituída por duas cláusulas –
- p>Leaf Query Clauses – Estas cláusulas são coincidentes, termo ou intervalo, que procuram um valor específico em campo específico.
- p>p>Compound Query Clauses – Estas consultas são uma combinação de cláusulas de consulta de folhas e outras consultas compostas para extrair a informação desejada.
Elasticsearch suporta um grande número de consultas. Uma consulta começa com uma palavra-chave de consulta e depois tem condições e filtros no interior sob a forma de objecto JSON. Os diferentes tipos de consultas foram descritos abaixo.
Match All Query
Esta é a consulta mais básica; devolve todo o conteúdo e com a pontuação de 1,0 para cada objecto.
POST /schools/_search{ "query":{ "match_all":{} }}
Ao executar o código acima, obtemos o seguinte resultado –
{ "took" : 7, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } }, { "_index" : "schools", "_type" : "school", "_id" : "4", "_score" : 1.0, "_source" : { "name" : "City Best School", "description" : "ICSE", "street" : "West End", "city" : "Meerut", "state" : "UP", "zip" : "250002", "location" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}
P>Perguntas de Texto Completo
Estas consultas são usadas para procurar um corpo completo de texto como um capítulo ou um artigo de notícia. Esta consulta funciona de acordo com o analisador associado a esse índice ou documento em particular. Nesta secção, discutiremos os diferentes tipos de consultas de texto completo.
P>P>Esta consulta combina um texto ou frase com os valores de um ou mais campos.
POST /schools*/_search{ "query":{ "match" : { "rating":"4.5" } }}
Na execução do código acima, obtemos a resposta como mostrado abaixo –
{ "took" : 44, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.47000363, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}
Multi Match Query
Esta consulta faz corresponder um texto ou frase com mais do que um campo.
POST /schools*/_search{ "query":{ "multi_match" : { "query": "paprola", "fields": } }}
Ao executar o código acima, obtemos a resposta como mostrado abaixo –
{ "took" : 12, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.9808292, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } } ] }}
Query String Query
Esta consulta usa o analisador de consulta e a palavra-chave query_string.
POST /schools*/_search{ "query":{ "query_string":{ "query":"beautiful" } }}
Ao executar o código acima, obtemos a resposta como mostrado abaixo –
{ "took" : 60, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" },………………………………….
Query Level Queries
Estas queries tratam principalmente de dados estruturados como números, datas e enumeros.
POST /schools*/_search{ "query":{ "term":{"zip":"176115"} }}
Ao executar o código acima, obtemos a resposta como mostrado abaixo –
……………………………..hits" : , } }] …………………………………………..
P>Esta consulta é utilizada para encontrar os objectos com valores entre os intervalos de valores dados. Para isso, precisamos de utilizar operadores tais como –
- gte – maior que igual a
- gt – maior que
- lte – menor que igual a
- lt – menor que
Por exemplo, observe o código dado abaixo –
POST /schools*/_search{ "query":{ "range":{ "rating":{ "gte":3.5 } } }}
Na execução do código acima, obtemos a resposta como mostrado abaixo –
{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}
Existem também outros tipos de consultas de nível de termo como –
- p>p> Consulta de Lista – Se um determinado campo tem valor não nulo.
- p>P>P>Pergunta não existente – Isto é completamente oposto a uma consulta existente, esta consulta procura objectos sem campos específicos ou campos com valor nulo.
- p>Wildcard ou regexp query – Esta consulta usa expressões regulares para encontrar padrões nos objectos.
Compound Queries
Estas consultas são uma colecção de diferentes consultas fundidas umas com as outras usando operadores booleanos como e, ou, não ou para índices diferentes ou tendo chamadas de função, etc.
POST /schools/_search{ "query": { "bool" : { "must" : { "term" : { "state" : "UP" } }, "filter": { "term" : { "fees" : "2200" } }, "minimum_should_match" : 1, "boost" : 1.0 } }}
Na execução do código acima, obtemos a resposta como mostrado abaixo –
{ "took" : 6, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 0, "relation" : "eq" }, "max_score" : null, "hits" : }}
Perguntas Geográficas
Estas consultas tratam de localizações geológicas e pontos geológicos. Estas consultas ajudam a descobrir escolas ou qualquer outro objecto geográfico próximo de qualquer local. É necessário utilizar dados de pontos geo tipo.
PUT /geo_example{ "mappings": { "properties": { "location": { "type": "geo_shape" } } }}
Na execução do código acima, obtemos a resposta como mostrado abaixo –
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "geo_example"}
Agora postamos os dados no índice criado acima.
POST /geo_example/_doc?refresh{ "name": "Chapter One, London, UK", "location": { "type": "point", "coordinates": }}
Na execução do código acima, obtemos a resposta como se mostra abaixo –