Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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
C# Nest Elasticsearch,结合Must和shoul的布尔查询_C#_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest_Booleanquery - Fatal编程技术网 elasticsearch,nest,booleanquery,C#,elasticsearch,Nest,Booleanquery" /> elasticsearch,nest,booleanquery,C#,elasticsearch,Nest,Booleanquery" />

C# Nest Elasticsearch,结合Must和shoul的布尔查询

C# Nest Elasticsearch,结合Must和shoul的布尔查询,c#,elasticsearch,nest,booleanquery,C#,elasticsearch,Nest,Booleanquery,我想按年份、格式和内容筛选一组文档 n伪SQL: SELECT * FROM /test/document WHERE ((format=f1|| format=f2||...|| format=fn) AND (Year!=2013 AND Year!=2015) AND (content like %c1% || content like %c2% ||...|| content like %cn%)) 如您所见,格式和内容项的数量是动态的,将由用户选择。 到目前为止,我了解了如何分

我想按年份、格式和内容筛选一组文档

n伪SQL:

SELECT * FROM /test/document
WHERE 
((format=f1|| format=f2||...|| format=fn) AND 
(Year!=2013 AND Year!=2015) AND 
(content like %c1% || content like %c2% ||...|| content like %cn%))
如您所见,格式和内容项的数量是动态的,将由用户选择。 到目前为止,我了解了如何分别对每个字段进行动态查询,然后使用bool查询将它们组合起来,如下面的代码所示

// For YEAR
QueryContainer qYear=null;
    foreach (var year in years)
    {
        qYear |= new TermQuery() { Field = "year", Value = year };     
    }

// For FORMAT
 var qformat = new List<QueryContainer>();
 foreach (var format in txtDocs)
   {                    
     qformat.Add(Query<Document>.Match(m => m.OnField(p => p.Format).Query(format)));                
   }

  // For CONTENT
  var qc = new List<QueryContainer>();
   qc.Add(Query<Document>.Match(m => m.OnField(p => p.File).Query(discpString).Boost(2)));
    qc.Add(Query<Document>.Match(m => m.OnField(p => p.File).Query(roleString)));
    qc.Add(Query<Document>.Match(m => m.OnField(p => p.File).Query(taskString)));
    qc.Add(Query<Document>.Match(m => m.OnField(p => p.File).Query(sysString).Boost(2)));

//MY QUERY
 var searchResults = client.Search<Document>(s => s.Fields(f => f.Title, f => f.Format, f => f.Year, f => f.DateCreated, f => f.Id, f => f.Path, f => f.Size, f => f.Firstwords).
           Index(defaultIndex).From(0).Size(100).
           Query(q => q.Bool(b => b.MustNot(qYear).Should(qformat.ToArray()).Should(qc.ToArray()))));
//年
QueryContainer qYear=null;
foreach(var年,以年为单位)
{
qYear |=newtermquery(){Field=“year”,Value=year};
}
//格式
var qformat=新列表();
foreach(txtDocs中的var格式)
{                    
qformat.Add(Query.Match(m=>m.OnField(p=>p.Format.Query(Format)));
}
//内容
var qc=新列表();
Add(Query.Match(m=>m.OnField(p=>p.File).Query(discpString.Boost(2));
qc.Add(Query.Match(m=>m.OnField(p=>p.File.Query(roleString));
Add(Query.Match(m=>m.OnField(p=>p.File.Query(taskString)));
Add(Query.Match(m=>m.OnField(p=>p.File).Query(sysString.Boost(2));
//我的问题
var searchResults=client.Search(s=>s.Fields(f=>f.Title,f=>f.Format,f=>f.Year,f=>f.DateCreated,f=>f.Id,f=>f.Path,f=>f.Size,f=>f.Firstwords)。
索引(defaultIndex).From(0).大小(100)。
查询(q=>q.Bool(b=>b.MustNot(qYear).Should(qformat.ToArray()).Should(qc.ToArray()));
当我运行这段代码时,year和content字段的结果是我所期望的,但也包括筛选列表中没有的其他格式!我希望它只检索那些具有选定格式的文档。
有人知道我的错误在哪里吗?

我可以找到我的错误在哪里! 我使用Querycontainer for format的命令与我当年使用的命令相同,然后在查询中使用了Must。以下是代码的更改部分:

 // For FORMAT
 QueryContainer qF=null;
 foreach (var format in txtDocs)
 {
     qF |= new TermQuery()
     { 
         Field = "format", 
         Value = format 
     }; 
 }

//MY QUERY
var searchResults = client.Search<Document>(s => s
     .Fields(
        f => f.Title, 
        f => f.Format, 
        f => f.Year, 
        f => f.DateCreated, 
        f => f.Id, 
        f => f.Path, 
        f => f.Size, 
        f => f.Firstwords)
    .Index(defaultIndex)
    .From(0)
    .Size(100)
    .Query(q => q
       .Bool(b => b.MustNot(qYear)
       .Must(qF)
       .Should(qc.ToArray())
     )
);
//格式
QueryContainer qF=null;
foreach(txtDocs中的var格式)
{
qF |=新术语查询()
{ 
Field=“format”,
值=格式
}; 
}
//我的问题
var searchResults=client.Search(s=>s
.菲尔德(
f=>f.标题,
f=>f.格式,
f=>f.年,
f=>f.DateCreated,
f=>f.Id,
f=>f.路径,
f=>f.尺寸,
f=>f.Firstwords)
.Index(默认索引)
.从(0)
.尺寸(100)
.Query(q=>q
.Bool(b=>b.MustNot(qYear)
.必须(资历架构)
.Should(qc.ToArray())
)
);