views:

764

answers:

1

Hi

I having trouble getting nHibernate.Search to create an Index.

If I use 1.2.1.4 of nHibernate.dll & nHibernate.Search.dll then the index is created correctly and I can inspect it with Luke (a Lucene utility). A segments file is created as well as a Fragments file etc

However, when I use v 2 of nHibernate.dll & nHibernate.Search.dll then the index is not created correctly. Only a 1k segments file is created in the Index directory and Luke is unable to inspect it.

The code I used in v1 was as follows:

_configuration = new Configuration();
            _configuration.Configure();
            _configuration.AddAssembly(typeof (Contact).Assembly);
            _sessionFactory = _configuration.BuildSessionFactory();
SearchFactory.Initialize(_configuration, _sessionFactory);

and I have the following in the config file

<property name="hibernate.search.default.directory_provider">NHibernate.Search.Storage.FSDirectoryProvider, NHibernate.Search</property>
<property name="hibernate.search.default.indexBase">~/Index</property>

in version 2 there is no SearchFactory. The only similar thing I could find was

SearchFactoryImpl.GetSearchFactory(_configuration);

So I have set up the config as follows

_configuration = new Configuration();
 _configuration.Configure();
 _configuration.AddAssembly(typeof (Contact).Assembly);
 _sessionFactory = _configuration.BuildSessionFactory();
        _configuration.SetProperty("hibernate.search.default.directory_provider",
                                       "NHibernate.Search.Store.FSDirectoryProvider, NHibernate.Search");

        _configuration.SetProperty("hibernate.search.default.indexBase", "Index");
        _configuration.SetProperty("hibernate.search.analyzer",
                                        "Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net");


        _configuration.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
        _configuration.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
        _configuration.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());

        SearchFactoryImpl.GetSearchFactory(_configuration);

This creates the bare bones of an Index but it is not viewable with Luke - which tells me it is corrupt

I have also used the following code to try and create the index manually, but again it only creates the segments file, nothing else

public void CreateIndex<T>(string rootIndexDirectory)
        {
            Type type = typeof (T);

            var info = new DirectoryInfo(Path.Combine(rootIndexDirectory, type.Name));

            // Recursively delete the index and files in there
            if (info.Exists) info.Delete(true);

            // Now recreate the index
            FSDirectory dir =
                FSDirectory.GetDirectory(Path.Combine(rootIndexDirectory, type.Name), true);
                    //Ioc.UrlProvider.MapPath(Path.Combine(rootIndexDirectory, type.Name)), true);

            try
            {
                var writer = new IndexWriter(dir, new StandardAnalyzer(), true);
                writer.Close();
            }
            finally
            {
                if (dir != null) dir.Close();
            }

            using (ISession session = _sessionFactory.OpenSession())
            {
                using (IFullTextSession fullTextSession = Search.CreateFullTextSession(session)) 
                {
                    foreach (var contact in _contacts)
                    {
                        //session.Save(contact);
                        fullTextSession.Index(contact);
                    }
                }
            }
        }

So my question is - do I have to use v1.1.4 of nHibernate if I want to use nHibernate.Search? Or can I use v2? In which case what am I doing wrong?

There is very little on the web about this.

Anyone?

+1  A: 

I have found a working example here:

http://darioquintana.com.ar/blogging/?p=21

The v2 nHibernate.Search.dll in this project does contain a SearchFactory (albeit in a different namespace).

The one I compiled from the SVN repository doesnt have this

So all sorted

Christo Fur