2017-07-21 4 views
0

Je sais que les deux requêtes ci-dessous peuvent obtenir les mêmes résultats. Mais existe-t-il un moyen de voir la dernière requête analysée par Elasticsearch, donc je peux certainement savoir qu'ils sont identiques? (Ou alors, ils sont en fait pas exactement le même, un coût peut-être moins de temps puis l'autre?)Comment connaître la requête finale DSL Elasticsearch analysée?

Requête 1:

GET /_search 
{ 
    "query": { 
    "constant_score": { 
     "filter": { 
     "term": { 
      "price": 20 
     } 
     } 
    } 
    } 
} 

Requête 2:

GET /_search 
{ 
    "query": { 
    "term": { 
     "price": 20 
    } 
    } 
} 

Répondre

1

Pour les tests et l'analyse de vos requêtes vous pouvez utiliser Slow Log qui permet d'enregistrer les phases de requête et de récupération dans un fichier journal. Il est hautement configurable - vous pouvez définir ce que cela signifie "requête lente" pour chaque index.

Exemple simple pour l'index « sample » (à des fins de test, il sera connecté avec le temps réglé sur « 0 » - vous pouvez définir votre propre seuil):

Fermez tout d'abord l'index:

curl -X POST http://127.0.0.1:9200/sample/_close 

configurez ensuite le lent Log:

curl -X PUT \ 
    'http://127.0.0.1:9200/sample/_settings?preserve_existing=true' \ 
    -d '{ 
    "index.indexing.slowlog.threshold.index.debug" : "0s", 
    "index.search.slowlog.threshold.fetch.debug" : "0s", 
    "index.search.slowlog.threshold.query.debug" : "0s" 
}' 

Ouvrir l'index:

curl -X POST http://127.0.0.1:9200/sample/_open 

Après l'exécution de la requête plus courte que vous avez fourni dans votre post (j'ai 5 tessons et la requête est exécutée sur chacun d'entre eux):

[index.search.slowlog.query] [sample][1] took[594.1micros], ..., source[{"query":{"term":{"price":{"value":33,"boost":1.0}}}}], 
[index.search.slowlog.query] [sample][3] took[649.4micros], ..., source[{"query":{"term":{"price":{"value":33,"boost":1.0}}}}], 
[index.search.slowlog.query] [sample][4] took[575.6micros], ..., source[{"query":{"term":{"price":{"value":33,"boost":1.0}}}}], 
[index.search.slowlog.query] [sample][2] took[1.2ms],  ..., source[{"query":{"term":{"price":{"value":33,"boost":1.0}}}}], 
[index.search.slowlog.query] [sample][0] took[4.3ms],  ..., source[{"query":{"term":{"price":{"value":33,"boost":1.0}}}}], 
... 

Après l'exécution de la requête plus que vous avez fourni dans votre message:

[index.search.slowlog.query] [sample][1] took[13.2ms], ..., source[{"query":{"constant_score":{"filter":{"term":{"price":{"value":33,"boost":1.0}}},"boost":1.0}}}], 
[index.search.slowlog.query] [sample][4] took[13.2ms], ..., source[{"query":{"constant_score":{"filter":{"term":{"price":{"value":33,"boost":1.0}}},"boost":1.0}}}], 
[index.search.slowlog.query] [sample][3] took[14.7ms], ..., source[{"query":{"constant_score":{"filter":{"term":{"price":{"value":33,"boost":1.0}}},"boost":1.0}}}], 
[index.search.slowlog.query] [sample][2] took[15.5ms], ..., source[{"query":{"constant_score":{"filter":{"term":{"price":{"value":33,"boost":1.0}}},"boost":1.0}}}], 
[index.search.slowlog.query] [sample][0] took[15.5ms], ..., source[{"query":{"constant_score":{"filter":{"term":{"price":{"value":33,"boost":1.0}}},"boost":1.0}}}], 
... 

Bien sûr, ce n'est qu'une tentative, mais cela peut être très utile pour des tests et des analyses plus approfondis.