2016-07-04 13 views
1

Ich möchte Felder auf einem verschachtelten Dokument auf meiner Elasticsearch db suchen. Ich verwende den folgenden Befehl von Feldern in einem verschachtelten Objekt suchen (immer 10 Innen Treffer):Suche nach verschachtelten Objekten auf Elasticsearch mit elasticsearch.js und Angular

curl -X GET 'http://localhost:9200/jira-dev/_search?pretty=true' -d ' 
{ 
"_source" : false, 
"query" : { 
    "nested" : { 
     "path" : "issues", 
     "query" : { 
      "bool": { 
      "should": [     
       { 
       "wildcard":{ 
        "issues.fields.description":"*migrate*" 
       } 
       }, 
       { 
       "wildcard":{ 
        "issues.fields.comment.comments.body":"*autodeploy*" 
       } 
       } 
      ] 
      }    
     }, 
     "inner_hits" : {"size": 5000} 
     } 
    } 
}' 

Aber wenn ich versuche, es zu nennen elasticsearch.js auf diese Weise verwenden, es bekommt kein Ergebnis:

client.search({ 
    index: 'jira-dev/', 
    type: 'jira', 
    body: { 
     query: { 
      nested : { 
       path : "issues", 
       query : { 
        bool: { 
         should: [     
         { 
          wildcard:{ 
           "issues.fields.description":"*migrate*" 
          } 
         }, 
         { 
          wildcard:{ 
           "issues.fields.comment.comments.body":"*autodeploy*" 
          } 
         } 
         ] 
        }    
       }, 
       inner_hits : {size: 5000} 
      } 
      } 
     } 
}).then(function (resp) { 
    var hits = resp.hits.totals; 
    console.log('works'); 
}, function (err) { 
    console.log('epic fail'); 
    console.trace(err.message); 
}); 

Ich nehme an, dass die Syntaxis, die ich verwende, falsch ist, aber ich habe kein Beispiel für verschachtelte Abfragen mit elasticsearch.js gefunden.

Vielen Dank im Voraus.

Edit:

Wie gewünscht folgenden wird die Konfiguration eines Dokuments:

curl -X POST 'http://localhost:9200/jira-dev/' -d '{ 
    "mappings" : { 
     "jira" : { 
      "properties" : { 
       "expand" : {"type" : "string"}, 
       "startAt" : {"type" : "integer"}, 
       "maxResults" : {"type" : "integer"}, 
       "total" : {"type" : "integer"}, 
       "issues" : { 
        "type" : "nested", 
        "include_in_parent" : false, 
        "properties" : { 
         "created" : {"type" : "date", "format" : "date_hour_minute_second_fraction"} 
        } 
       } 
      } 
     } 
    }, 
    "settings" : { 
     "number_of_shards" : 5, 
     "number_of_replicas" : 1 
    } 
}' 

und ein Beispiel:

{ 

    "_index": "jira-dev", 
    "_type": "jira", 
    "_id": "1", 
    "_version": 1, 
    "_score": 1, 
    "_source": { 
     "expand": "schema,names", 
     "startAt": 0, 
     "maxResults": 1000, 
     "total": 604, 
     "issues": [ 
      { 

       "key": "STACK-1", 
       "fields": { 
        "summary": "A nice summary", 
        "created": "2016-06-28T09:45:32.000+0000", 
        "description": null,      
        "comment": { 
         "startAt": 0, 
         "maxResults": 1, 
         "total": 1, 
         "comments": [ 
          { 
           "self": url", 
           "id": "30293", 
           "author": { 
            "name": "stack_overflow", 
            "key": "stack_overflow" 
           }, 
           "body": "Following epic has been created: url", 
           "updateAuthor": { 
            "name": "stack_overflow", 
            "key": "stack_overflow", 
            "timeZone": "Europe/Madrid" 
           }, 
           "created": "2016-03-04T10:09:11.000+0000", 
           "updated": "2016-03-04T10:09:11.000+0000" 
          } 
         ] 
        } 
       } 
      } 
     ] 
    } 
} 
+0

Können Sie ein Beispiel geben, wie die Struktur Ihrer Dokumente aussieht? –

+0

Sicher habe ich ein Beispiel und die Konfiguration hinzugefügt –

Antwort

0

Schließlich dieses Problem zu überspringen hat habe ich eine Middleware Server zwischen eckig und elastisch. Dieser Server ist ein Python-Server und ist leicht zu GET/POST auf elasticsearch über curl.

Darüber hinaus habe ich versucht, Curl direkt von Angular (HTML GET) zu verwenden, aber aufgrund der Konvention kann ein HTML-Server Daten auf eine GET-Petition ignorieren. Daher war es via Curl von Angular unmöglich, Petitionen auf Gummibändern zu machen.

Verwandte Themen