繁体   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