对于Solr中的过滤器查询,我需要包括不属于某种类型的所有文档,以及该类型中具有特定字段值的所有文档.
我试过这个:
fq=(-type_id:(A) OR content:(['' TO *]))
Run Code Online (Sandbox Code Playgroud)
但是它排除了type_idB,C等有空的文件content.(type_id是一个string领域,content是text.)
我已经看到了这个问题:复杂的SOLR查询包括NOT和OR以及关于运算符的这篇文章:http://robotlibrarian.billdueber.com/2011/12/solr-and-boolean-operators/.我认为我的语法应该是正确的.谁能看到我的错误?
更新:我正在使用LuceneQParser.它将上面的过滤器查询解析为
-type_id:A content:['' TO *]
Run Code Online (Sandbox Code Playgroud)
它将comments(-type_id:A OR (content:[* TO *] AND type_id:A))中建议的过滤器查询解析为
-type_id:A (+content:[* TO *] +type_id:A)
Run Code Online (Sandbox Code Playgroud)
所以没有结果.
前几天在代码审查期间出现了一个关于 using 块应该多快关闭的问题。一个阵营说,“一旦你完成了对象”;另一个,“在它超出范围之前的某个时间”。
在这个特定的例子中,有一个 DataTable 和一个 SqlCommand 对象要处理。我们需要在单个语句中引用两者,并且需要迭代 DataTable。
营地1:
List<MyObject> listToReturn = new List<MyObject>();
DataTable dt = null;
try
{
using (InHouseDataAdapter inHouseDataAdapter = new InHouseDataAdapter())
using (SqlCommand cmd = new SqlCommand())
{
dt = inHouseDataAdapter.GetDataTable(cmd);
}
foreach (DataRow dr in dt.Rows)
{
listToReturn.Add(new MyObject(dr));
}
}
finally
{
if (dt != null)
{
dt.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
推理:在使用完 SqlCommand 后立即处理它。不要在另一个对象的 using 块中开始可能很长的操作,例如迭代表。
营地2:
List<MyObject> listToReturn = new List<MyObject>();
using (InHouseDataAdapter inHouseDataAdapter = new InHouseDataAdapter())
using (SqlCommand cmd = new …Run Code Online (Sandbox Code Playgroud) search ×2
solr ×2
.net ×1
boolean ×1
c# ×1
filter ×1
idisposable ×1
lucene ×1
n-gram ×1
performance ×1