c# - 如何清空 lucene.net 中的 BooleanQuery 对象?

标签 c# lucene lucene.net

int length3 = CheckBoxList4.Items.Count;
int count = 0;         
for (int i = 0; i < length3; i++)
{
    BooleanQuery finalQuery1 = new BooleanQuery();                
    finalQuery1 = (BooleanQuery)Session["Luc_Query"];
    var query1 = new QueryParser("Industry", analyzer).Parse(CheckBoxList4.Items[i].Text);
    finalQuery1.Add(query1, BooleanClause.Occur.MUST);                
    hits = searcher.Search(finalQuery1);
    count = hits.Length();
    CheckBoxList4.Items[i].Text = CheckBoxList4.Items[i].Text +" " +count.ToString() ;
}

我试图使 finalQuery1 为空,但它重复了此 query(finalQuery1.Add(query1, BooleanClause.Occur.MUST);) 的附加值。我用来使 BooleanQuery 为空的方法是在下面,但它仍然无法正常工作。

finalQuery1 = (BooleanQuery)null;
finalQuery1=null;

最佳答案

我假设您不想修改存储在 Session["Luc_Query"] 中的查询,只需在每次循环迭代中不修改它即可。

您的代码不起作用,因为您在循环的每次迭代中都修改了相同的查询实例。您需要对原始查询的副本进行更改,而不是更改原始查询。

试试下面的代码:

int length3 = CheckBoxList4.Items.Count;
int count = 0;         
for (int i = 0; i < length3; i++)
{
    BooleanQuery finalQuery1 = (BooleanQuery)Session["Luc_Query"];
    finalQuery1 = (BooleanQuery)finalQuery1.Clone();
    var query1 = new QueryParser("Industry", analyzer).Parse(CheckBoxList4.Items[i].Text);
    finalQuery1.Add(query1, BooleanClause.Occur.MUST);                
    hits = searcher.Search(finalQuery1);
    count = hits.Length();
    CheckBoxList4.Items[i].Text = CheckBoxList4.Items[i].Text + " " + count.ToString() ;
}

关于c# - 如何清空 lucene.net 中的 BooleanQuery 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527632/

相关文章:

C# 如何在无法在命名空间中包含 System.Linq 的情况下将 FirstOrDefault 与数组一起使用?

c# - 将 JSON 字符串反序列化为 C# 对象

azure - 如何构造 Azure 搜索查询以返回仅基于特定字段的通配符搜索?

solr - 一次在多个内核中更新 solr 中的托管架构文件

c# - 当在搜索中使用多个词时,如何在 Lucene.net 中执行 AND 搜索?

c# - 通过对象 ID 更新数组对象的 jsonpatch 路径

c# - 将水平条形图更改为垂直条形图

google-app-engine - Google App Engine : Lucene org. apache.lucene.store.LockObtainFailedException:锁定获取超时

Lucene.net 返回正确的查询命中数,但不返回正确的文档

c# - lucene.net IndexWriter 和 Azure WebJob