小编Kim*_*rly的帖子

Solr过滤器查询包括NOT和OR

对于Solr中的过滤器查询,我需要包括不属于某种类型的所有文档,以及该类型中具有特定字段值的所有文档.

我试过这个:

fq=(-type_id:(A) OR content:(['' TO *]))
Run Code Online (Sandbox Code Playgroud)

但是它排除了type_idB,C等有空的文件content.(type_id是一个string领域,contenttext.)

我已经看到了这个问题:复杂的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)

所以没有结果.

search solr boolean filter

6
推荐指数
1
解决办法
1万
查看次数

我应该多快关闭 using 块?

前几天在代码审查期间出现了一个关于 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)

.net c# performance idisposable using-statement

5
推荐指数
0
解决办法
260
查看次数

我可以保护短词免受 Solr 中的 n-gram 过滤器的影响吗?

我看过这个关于在 Solr 中搜索短词的问题。我想知道是否有另一种可能的解决方案来解决类似的问题。我使用的 EdgeNGramFilter 的 minGramSize 为 3。我想保护一组特定的较短单词(主要是两个字母的首字母缩写词)不被忽略,但我想将 minGramSize 保持为 3 以用于其他所有内容。EdgeNGramFilter 不支持受保护的单词列表。是否有任何过滤器或设置可以在单个字段类型中实现这一点,还是我需要编写一个?

或者,我是否以错误的方式思考这个问题?

lucene search solr n-gram

5
推荐指数
0
解决办法
680
查看次数