문제

인덱스를 만들기 위해 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 저장소에서 편집 한 것은 이것에 없습니다.

그래서 모두 정렬되었습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top