2016-10-26 3 views
0

Ich bilden eine elastische Suchabfrage wie unten. Ich möchte das Werte-Array dynamisch durchlaufen und die Abfrage konstruieren, anstatt die Array-Mitglieder fest zu codieren.Elastische Suche - fügen Sie den Begriff dynamisch in bool Abfrage

var myQuery = q.Bool(bb => bb.Must(fi => fi.Term("_type", "myValue"), 
        fi => fi.Term("tags", values[0]), 
        fi => fi.Term("tags", values[1]), 
        fi => fi.Term("tags", values[2]), 
        fi => fi.Term("tags", values[3]), 
        fi => fi.QueryString(ques => ques.Query(query)))); 

Ich mag so etwas wie die unten tun, da die Anzahl der Elemente in dem Werte-Array von Zeit zu Zeit unterscheidet

var myQuery = q.Bool(bb => bb.Must(fi => fi.Term("_type", "myValue"), 
        foreach(item in Values) 
        { 
        fi => fi.Term("tags", item), 
        } 
        fi => fi.QueryString(ques => ques.Query(query)))); 
+0

Könnten Sie bitte die verwendete Sprache und die verwendeten Frameworks angeben? Ich glaube, dass Ihr Problem mehr mit einem von denen als mit elasticsearch verbunden ist – Pandawan

Antwort

0

Sie können etwas tun,

List<QueryContainer> myDynamicTermQuery = new List<QueryContainer>(); 

// Start of Logic 

myDynamicTermQuery.Add(Query<YourType>.Term("_type", myValue)) 
foreach(item in Values) 
{ 
    myDynamicTermQuery.Add(Query<YourType>.Term("tags", item)) 
} 
myDynamicTermQuery.Add(Query<YourType>.QueryString(ques => ques.Query(query))) 

// End of Logic    

var myQuery = q.Bool(bb => myDynamicTermQuery) 
0

Habe es funktioniert.

var myQuery = q.Bool(bb =>bb.Must(fi => 
    { 
    var ff = fi.Term("_type", myValue); 
    ff = ssTerms.Aggregate(ff, (current, term) => current & fi.Term("tags", term)); 
    ff &= fi.QueryString(ques => ques.Query(query)); 
    return ff; 
    }); 
Verwandte Themen