J'ai du mal à obtenir nHibernate.Search pour créer un index. Si j'utilise 1.2.1.4 de nHibernate.dll & nHibernate.Search.dll alors l'index est créé correctement et je peux l'inspecter avec Luke (un utilitaire Lucene). Un fichier de segments est créé ainsi qu'un fichier Fragments etcnHibernate.Recherche avec nHibernate v2
Cependant, quand j'utilise v 2 nHibernate.dll & nHibernate.Search.dll alors l'index ne se crée pas correctement. Seul un fichier de segments 1k est créé dans le répertoire Index et Luke ne peut pas l'inspecter.
Le code je en v1 était la suivante:
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof (Contact).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
SearchFactory.Initialize(_configuration, _sessionFactory);
et je le suivais dans le fichier de configuration
<property name="hibernate.search.default.directory_provider">NHibernate.Search.Storage.FSDirectoryProvider, NHibernate.Search</property>
<property name="hibernate.search.default.indexBase">~/Index</property>
dans la version 2 il n'y a pas SearchFactory. La seule chose similaire que je pouvais trouver était
SearchFactoryImpl.GetSearchFactory(_configuration);
J'ai donc mis en place la configuration comme suit
_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);
Cela crée les os nus d'un indice, mais il n'est pas visible avec Luke - qui me dit il est corrompu
J'ai aussi utilisé le code suivant pour essayer de créer l'index manuellement, mais encore une fois, il ne crée que le fichier segments, rien d'autre
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);
}
}
}
}
Donc ma question est - dois-je utiliser v1.1.4 de nHibernate si je veux utiliser nHibernate.Search? Ou puis-je utiliser v2? Dans ce cas, qu'est-ce que je fais de mal?
Il y a très peu de choses sur le web à ce sujet.
Quelqu'un?
triés Quelqu'un s'il vous plaît changer le titre nhibrnate à NHibernate – Cherian