Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/148.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
NHibernate Search Lucene.NET SearchFactory为空_Nhibernate_Fluent Nhibernate_Lucene.net_Nhibernate.search - Fatal编程技术网

NHibernate Search Lucene.NET SearchFactory为空

NHibernate Search Lucene.NET SearchFactory为空,nhibernate,fluent-nhibernate,lucene.net,nhibernate.search,Nhibernate,Fluent Nhibernate,Lucene.net,Nhibernate.search,我已经为以下问题挣扎了几个小时了。我用不同的NHibernate/NHibernate.Search程序集(3.0.0.4/2.1.2)尝试了这个方法,所有这些程序集都会导致相同的错误。使用的Lucene版本是2.9.2.2 所有这些都是从源代码编译而来的。 NHibernate设置为使用NHibernate搜索,配置通过流畅的NHibernate FluentConfiguration fc = Fluently.Configure() . (mappings, db config, etc.

我已经为以下问题挣扎了几个小时了。我用不同的NHibernate/NHibernate.Search程序集(3.0.0.4/2.1.2)尝试了这个方法,所有这些程序集都会导致相同的错误。使用的Lucene版本是2.9.2.2

所有这些都是从源代码编译而来的。 NHibernate设置为使用NHibernate搜索,配置通过流畅的NHibernate

FluentConfiguration fc = Fluently.Configure()
. (mappings, db config, etc.)
.ExposeConfiguration
            (
                cfg =>
                {
                    cfg.SetProperty("hibernate.search.default.directory_provider", typeof(FSDirectoryProvider).AssemblyQualifiedName);
                    cfg.SetProperty("hibernate.search.default.indexBase", "~/Index");
                    cfg.SetProperty("hibernate.search.default.indexBase.create", "true");

                    cfg.SetListener(NHibernate.Event.ListenerType.PostUpdate, new FullTextIndexEventListener());
                    cfg.SetListener(NHibernate.Event.ListenerType.PostInsert, new FullTextIndexEventListener());
                    cfg.SetListener(NHibernate.Event.ListenerType.PostDelete, new FullTextIndexEventListener());
                }
            );
到目前为止,在bin文件夹的index目录中创建了一个索引(segments.gen和segments_1文件)

创建配置后,我获取NHibernate会话,并尝试为某些内容编制索引:

        var _session = _factory.OpenSession();
        using (ITransaction tx = _session.BeginTransaction())
        {
            var fts = Search.CreateFullTextSession(_session);
            fts.PurgeAll(typeof(User));

            var coll = fts.CreateCriteria<User>().List<User>();
            foreach (var item in coll)
            {
                fts.Index(item);
            }

            tx.Commit();
        }
此错误是从NHiberate.Search.dll引发的,看起来SearchFactory未初始化。应创建SearchFactory的代码返回空值:

            if (searchFactory == null)
            {
                searchFactory = ContextHelper.GetSearchFactory(session);
            }
遇到了几种可能的解决方案,其中我需要使用SearchFactory.initialize初始化SearchFactory,但在我的(2.0/3.0)NHibernate.Search程序集中不存在这样的方法

NHibernate.Search.Search.CreateFullTextSession(_session)
            .CreateFullTextQuery<User>("Firstname:Cees").List<User>();
返回一个SearchFactoryImpl实例,但不知道如何处理它


也许我错过了什么?非常感谢您的帮助。

嗯,似乎Ninject与此有关。不知道为什么/如何。我有一个NH3.0.1.4000+搜索+Lucene 2.9.2.2的工作解决方案,如果有兴趣,请给我发一封电子邮件

完整的解决方案,适用于含或不含FluentNHibernate的NHibernate

FluentConfiguration fc = Fluently.Configure()
. (mappings, db config, etc.)
.ExposeConfiguration
            (
                cfg =>
                {
                    cfg.SetProperty("hibernate.search.default.directory_provider", typeof(FSDirectoryProvider).AssemblyQualifiedName);
                    cfg.SetProperty("hibernate.search.default.indexBase", "~/Index");
                    cfg.SetProperty("hibernate.search.default.indexBase.create", "true");

                    cfg.SetListener(NHibernate.Event.ListenerType.PostUpdate, new FullTextIndexEventListener());
                    cfg.SetListener(NHibernate.Event.ListenerType.PostInsert, new FullTextIndexEventListener());
                    cfg.SetListener(NHibernate.Event.ListenerType.PostDelete, new FullTextIndexEventListener());
                }
            );
IDictionary<System.Type, DocumentBuilder> builders = searchFactory.DocumentBuilders;
SearchFactoryImpl searchFactory = NHibernate.Search.Impl.SearchFactoryImpl.GetSearchFactory(config);