Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何在ElasticSearch中有条件地添加多个条件?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch 如何在ElasticSearch中有条件地添加多个条件?,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何在ElasticSearch中有条件地添加多个条件?,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何在ElasticSearch中有条件地添加多个条件?

elasticsearch 如何在ElasticSearch中有条件地添加多个条件?,elasticsearch,nest,elasticsearch,Nest,在以下筛选器查询中: var searchResults = _client.Search<MyIndexable>(s => s .Query(q => q .Bool(b => b .Must( subQuery => subQuery.QueryString(qs => qs.OnFields(f => f.Title, f =&

在以下筛选器查询中:

 var searchResults = _client.Search<MyIndexable>(s => s
        .Query(q => q
            .Bool(b => b
                .Must(
                    subQuery => subQuery.QueryString(qs => qs.OnFields(f => f.Title, f => f.Description).Query(searchTerm + "*"")),
                    subQuery => subQuery.Term(f => f.field1, "some string"),
                    subQuery => subQuery.Term(f => f.field2 , "some Guid")))));

有人能帮我做这件事吗?

由于方法链接,您很难做到这一点

用json设置配置更容易处理。因为json是一个字符串,所以很容易将其打断并插入条件等

例如:

$config = '{
    "query":
    {';

if (condition) {
    $config .= '"match":
    {
        "foo": "bar"
    }';   
}

$config .= '
    }
}';

当然,您可以自由选择构建json字符串的方式。

可以在Nest中完成。请参阅下面的代码:

var funcs = new List<Func<QueryDescriptor<MyIndexable>, QueryContainer>>();
funcs.Add(subQuery.QueryString(qs => qs.OnFields(f => f.Title, f => f.Description).Query(searchTerm + "*"")));

if (request.field2) // I believe this is some bool variable
{
    funcs.Add(subQuery => subQuery.Term(f => f.field1, "some string"));
}

funcs.Add(subQuery => subQuery => subQuery.Term(f => f.field2 , "some Guid"));

var searchResults = _client.Search<MyIndexable>(s => s
    .Query(q => q
        .Bool(b => b
            .Must(funcs.ToArray()))));
var funcs=new List();
Add(subQuery.QueryString(qs=>qs.OnFields(f=>f.Title,f=>f.Description).Query(searchTerm+“*”));
if(request.field2)//我相信这是一个bool变量
{
Add(subQuery=>subQuery.Term(f=>f.field1,“一些字符串”);
}
Add(subQuery=>subQuery=>subQuery.Term(f=>f.field2,“someguid”);
var searchResults=\u client.Search(s=>s
.Query(q=>q
.Bool(b=>b
.Must(functs.ToArray());

bittusarkar,在上述情况下,如何让子查询实例在BoolFilterDescriptor(Must)下添加筛选器?就像我需要添加ExistFilter而不是QueryString,然后有条件地使用筛选器一样?“筛选器”:{“bool”:{“Must”:[{“exists”:{“field”:“Cid”}},{“exists”:{“field”:“prf”},{“term”:{“IsActive”:true},你不需要在任何地方定义子查询。它是
Func
定义的一部分。我粘贴的代码在语法上是正确的。你可以用你想要实现的任何其他查询替换
QueryString
。哦..是的,我知道了。在我的例子中,我使用了FilterDescriptor而不是QueryDescriptor,根据上面的json过滤器字符串..和它的w很好,谢谢你的帮助
var funcs = new List<Func<QueryDescriptor<MyIndexable>, QueryContainer>>();
funcs.Add(subQuery.QueryString(qs => qs.OnFields(f => f.Title, f => f.Description).Query(searchTerm + "*"")));

if (request.field2) // I believe this is some bool variable
{
    funcs.Add(subQuery => subQuery.Term(f => f.field1, "some string"));
}

funcs.Add(subQuery => subQuery => subQuery.Term(f => f.field2 , "some Guid"));

var searchResults = _client.Search<MyIndexable>(s => s
    .Query(q => q
        .Bool(b => b
            .Must(funcs.ToArray()))));