nhibernate. nhibernate v2와 검색
-
06-07-2019 - |
문제
인덱스를 만들기 위해 nhibernate.search를받는 데 어려움이 있습니다.
nhibernate.dll & nhibernate.search.dll의 1.2.1.4를 사용하면 인덱스가 올바르게 생성되어 Luke (Lucene 유틸리티)로 검사 할 수 있습니다. 조각 파일뿐만 아니라 세그먼트 파일이 생성됩니다.
그러나 nhibernate.dll & nhibernate.search.dll의 v 2를 사용하면 색인이 올바르게 생성되지 않습니다. 인덱스 디렉토리에 1K 세그먼트 파일 만 생성되며 Luke는 검사 할 수 없습니다.
V1에서 사용한 코드는 다음과 같습니다.
_configuration = new Configuration();
_configuration.Configure();
_configuration.AddAssembly(typeof (Contact).Assembly);
_sessionFactory = _configuration.BuildSessionFactory();
SearchFactory.Initialize(_configuration, _sessionFactory);
구성 파일에는 다음이 있습니다
<property name="hibernate.search.default.directory_provider">NHibernate.Search.Storage.FSDirectoryProvider, NHibernate.Search</property>
<property name="hibernate.search.default.indexBase">~/Index</property>
버전 2에는 SearchFactory가 없습니다. 내가 찾을 수있는 유일한 것은
SearchFactoryImpl.GetSearchFactory(_configuration);
따라서 다음과 같이 구성을 설정했습니다
_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);
이것은 색인의 맨 뼈를 만들지 만 루크로는 볼 수 없습니다.
또한 다음 코드를 사용하여 수동으로 인덱스를 만들려고 시도했지만 다시 세그먼트 파일 만 생성합니다.
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);
}
}
}
}
그래서 내 질문은 - nhibernate.search를 사용하려면 nhibernate의 v1.1.4를 사용해야합니까? 아니면 v2를 사용할 수 있습니까? 어떤 경우에 내가 무엇을 잘못하고 있습니까?
이것에 대해 웹에는 거의 없습니다.
누구나?
해결책
여기서 작업 예제를 찾았습니다.
http://darioquintana.com.ar/blogging/?p=21
이 프로젝트의 v2 nhibernate.search.dll에는 SearchFactory가 포함되어 있습니다 (다른 네임 스페이스에도 불구하고).
SVN 저장소에서 편집 한 것은 이것에 없습니다.
그래서 모두 정렬되었습니다