2017-07-21 2 views
0

Ich weiß, dass die beiden folgenden Abfragen die gleichen Ergebnisse erzielen können. Aber gibt es eine Möglichkeit, die endgültige geparste Abfrage von Elasticsearch zu sehen, damit ich sicher weiß, dass sie identisch sind? (Oder sie sind eigentlich nicht genau gleich, vielleicht eine weniger Zeit kosten dann das andere?)Wie kann ich die letzte Abfrage DSL Elasticsearch analysieren?

Abfrage 1:

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

Abfrage 2:

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

Antwort

1

Zum Testen und Analysieren Ihrer Anfragen Sie können Slow Log verwenden, mit dem Abfrage- und Abrufphasen in einer Protokolldatei protokolliert werden können. Es ist in hohem Grade konfigurierbar - Sie können definieren, was es "langsame Abfrage" für jeden Index bedeutet.

Einfaches Beispiel für Index mit dem Namen „Probe“ (für Testzwecke wird es mit der Zeit auf „0“ gesetzt wird Anmeldung - Sie Ihre eigene Schwelle einstellen):

zuerst den Index in der Nähe:

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

dann das langsame Log konfigurieren:

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" 
}' 

Öffnen Sie den Index:

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

Nachdem die kürzere Abfrage ausführen Sie in Ihrem Beitrag zur Verfügung gestellt (ich habe 5 Scherben bekommt und die Abfrage für jede von ihnen ausgeführt wird):

[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}}}}], 
... 

Nach der längeren Abfrage ausführen Sie in Ihrem Beitrag zur Verfügung gestellt:

[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}}}], 
... 

Natürlich ist dies nur ein einziger Versuch, aber es kann für tiefere Tests und Analysen sehr nützlich sein.

Verwandte Themen