在控制台应用程序中使用内容查询的Sense / net

时间:2016-11-16 10:13:35

标签: sensenet

我尝试在控制台应用程序中使用内容查询,但它抛出异常"对象引用未设置为对象的实例"。 请帮我解决这个问题。

var startSettings = new RepositoryStartSettings
            {
                Console = Console.Out,
                StartLuceneManager = false,
                IsWebContext = false,                    
                PluginsPath = AppDomain.CurrentDomain.BaseDirectory,
            };

            using (Repository.Start(startSettings))
            {
                try
                {
                    string path = "/Root/Sites/Default_Site/workspaces/Document/HACCP/Document_Library/SanXuat/ChonLocChuanBiDiaDiemSXRau";
                    string fieldName1 = "Name";

                    var content = Content.Load(path);

                    int count = ContentQuery.Query(".AUTOFILTERS:OFF .COUNTONLY Infolder:" + path).Count;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }  
           }

1 个答案:

答案 0 :(得分:3)

如果要执行内容查询,则必须在启动存储库时启用 LuceneManager ,因为该组件负责查询。

new RepositoryStartSettings
{
   Console = Console.Out,
   StartLuceneManager = true, // <-- this is necessary
   IsWebContext = false,                    
   PluginsPath = AppDomain.CurrentDomain.BaseDirectory,
}

请确保所有配置值都已到位(例如索引目录路径,启用外部搜索引擎)。您可以从导出或导入工具的配置文件中复制它们。

还有一些说明:

  • 在内容查询中请始终将路径表达式括在引号中,因为如果路径中有空格,则会导致难以查找的查询错误(因为它会返回不同的结果集)。例如:

    InTree:'/ Root / My Folder'

或者您可以使用内置参数功能来确保相同:

// note the @0 parameter, which is a 0-based index
ContentQuery.Query("+TypeIs:Article +InTree:@0", null, containerPath);