2016-11-18 2 views
1

Ich habe Dokumente wie die unten in meinem ElasticsearchSuchabfrage in Elasticsearch

{"method":"POST","url":"/saas/services/1.0/account/*/purchase/*/subscription/cancel"} 
{"method":"POST","url":"/saas/services/1.0/account/*/purchase/*/cancel"} 

ich diese Dokumente am searching node.js Client. Unten ist die Abfrage, die ich sende.

Beispiel 1 Typ: DSL

client.search({ 
    index: 'my_node', 
    body: { 
     query: { 
      bool: { 
       must: { 
        match: { method: 'POST' }, 
        match: { url: '/saas/services/1.0/account/*/purchase/*/cancel' } 
       } 
      } 
     } 
    } 
} 

Output ich den anderen Datensatz bin immer mit Abonnement kündigen. Die Abfrage stimmt nicht mit dem exakten Dokument überein. Ich habe die folgende Abfrage ausprobiert, es funktionierte für diesen Fall, aber funktionierte nicht für einige andere Testfälle.

Dokument

{"method":"POST","url":"/paas/service/1.0/act/*/purchase"}} 
    {"method":"GET","url":"/paas/service/1.0/act/*/purchase"}} 
    {"method":"PUT","url":"/paas/service/1.0/act/*/purchase"}} 

Beispiel 2 Typ: Query-String

client.search({ 
    index: 'my_node', 
    q: 'method: POST AND url: /saas/services/1.0/account/*/purchase' 
} 

Ausgabe

ich die GET-Kaufbeleg unabhängig von anderen zwei. Für einige andere Dokumente wurde das method-Argument nicht erkannt.

Wie schreibe ich elasticsearch Abfrage, um die Dokumente zu durchsuchen, um sowohl die Eigenschaften von Methode und URL übereinzustimmen. Ich hatte versucht, Zeit für die URL zu erhöhen, aber scheint nicht zu funktionieren.

Bearbeiten - Mapping Informationen

{ 
    "nodeclient": { 
    "mappings": { 
     "logs": { 
     "properties": { 
      "method": { 
      "type": "string" }, 
      "url": { 
      "type": "string" } 
    } } } 
    } 
} 
+0

Was ist die Zuordnung Ihrer Dokumente? Können Sie Ihre Frage mit der Ausgabe aktualisieren, die Sie von 'curl -XGET localhost erhalten: 9200/my_node/_mapping' – Val

+0

@val Ich habe den Beitrag mit Mapping-Informationen aktualisiert. Vielen Dank !! –

Antwort

0

Versuchen Anführungszeichen

client.search ({index hinzu: 'my_node', Körper: { "Abfrage": { "Bool": { " Muss ": { " Übereinstimmung ": {" Methode ": 'POST'}," Übereinstimmung ": {" url ": '/saas/services/1.0/account/ /Kauf//stornieren'}}} }}}

0

Ich habe versucht, die Abfrage mit Mirage plugin für Elasticsearch Abfragen zu optimieren. Ich habe mit verschiedenen Beispielen versucht und die Antworten gesehen. Im Folgenden finden Sie meine letzte Abfrage, die für mein Szenario funktioniert

match_phrase besser für den URL-Parameter geeignet. Außerdem habe ich den Array-Teil in der must-Klausel übersehen.