简体   繁体   English

弹性搜索-在布尔查询中动态添加术语

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

I am forming an elastic search query as below. 我正在形成如下的弹性搜索查询。 I would like to loop through the values array dynamically and construct the query rather than hardcoding the array members. 我想动态遍历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))));

I want to do something like the below, since the number of items in the values array may differ from time to time 我想执行以下操作,因为值数组中的项目数可能会不时发生变化

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

You can do something like this, 你可以做这样的事情,

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)

Got it working. 得到它的工作。

  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