2017-07-25 2 views
0

Ich möchte Sie fragen, ob es eine Möglichkeit gibt, SearchRequestBuilder srb in ElasticSearch zu filtern. Ich habe einen Index besteht aus Unternehmen. Jede Firma hat ein Dokument für die englische Sprache und möglicherweise Dokumente für andere Sprachen. Ich möchte also alle Firmen, die Dokumente für die ausgewählte Benutzersprache haben, mitbringen, und wenn diese Firma kein Dokument für diese Sprache hat, bringe mich bitte Englisch.Gefilterte Antwortdaten von ElasticSearch

Gibt es eine Möglichkeit, dies zu tun? Vielen Dank im Voraus.

+0

Sind Dokumente als Liste in einem Unternehmen gespeichert? Oder sind das separate Dokumente, die mit einer Firma durch eine ID in Verbindung gebracht werden? – Joanna

Antwort

0

Antwort aktualisiert, um alle Unternehmen zurückzugeben, die Scroll-API verwenden.

QueryBuilder qb = termQuery("Document", "English"); 

SearchResponse scrollResp = client.prepareSearch(test) 
    .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC) 
    .setScroll(new TimeValue(60000)) 
    .setQuery(qb) 
    .setSize(100).execute().actionGet(); //max of 100 hits will be returned for each scroll 
//Scroll until no hits are returned 
do { 
    for (SearchHit hit : scrollResp.getHits().getHits()) { 
    //Handle the hit... 
    } 

    scrollResp =client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new 
    TimeValue(60000)).execute().actionGet(); 
    } 
    while(scrollResp.getHits().getHits().length != 0); 
// Zero hit mark the end of the scroll and the while loop. 

Und Sie können nur ein, wenn Block für die Rückgabe Unternehmen mit Englisch-Dokument verwenden, wenn kein Dokument für andere Sprachen zu finden ist.

So etwas wie dieses

if(SearchResponse1 == null) //searchResponse for Non english language 
{ 
(Search for documents in English) 
} 

hoffe, das hilft

+0

Wenn ich SetSize (1) setze, werde ich 1 Firma bringen, aber ich möchte alle Firmen bringen. Und die zweite ist, wie ich in einem die SearchResponse fusioniere? –

+0

Sie können scrollen API verwenden, um alle Unternehmen zu erhalten.Sehen Sie aktualisierte Antwort.Nicht sicher, was meinst du mit "in einer der SerachResponse zusammenführen" – Dungeon