2016-10-26 2 views
0

Я формирую эластичный поисковый запрос, как показано ниже. Я хотел бы динамически преобразовывать массив значений и строить запрос, а не жестко кодировать элементы массива.Упругий поиск - добавьте термин динамически в bool query

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)))); 

Я хочу сделать что-то вроде ниже, так как число элементов в массиве значений могут отличаться время от времени

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

Не могли бы вы указать используемый язык и рамки, если таковые имеются? Я считаю, что ваша проблема больше связана с одним из них, чем с elasticsearch – Pandawan

ответ

0

Вы можете сделать что-то вроде этого,

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

Получил работу.

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; 
    }); 
Смежные вопросы