簡體   English   中英

彈性搜索-在布爾查詢中動態添加術語

[英]Elastic search - add term dynamically in bool query

我正在形成如下的彈性搜索查詢。 我想動態遍歷values數組並構造查詢,而不是對數組成員進行硬編碼。

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

你可以做這樣的事情,

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)

得到它的工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM