You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@lucenenet.apache.org by Christian Setzkorn <ch...@setzkorn.eu> on 2011/11/14 17:24:50 UTC

[Lucene.Net] inheritance in lucene .net

I have a class Publication which has a child PublicationX. I am trying to
index all instances of Publication like this:

public void BuildSearchIndex()
{
    FSDirectory entityDirectory = null;
    IndexWriter writer = null;

    var entityType = typeof(Publication);

    var indexDirectory = new DirectoryInfo(GetIndexDirectory());

    if (indexDirectory.Exists)
    {
    indexDirectory.Delete(true);
    }

    try
    {
    var dir = new DirectoryInfo(Path.Combine(indexDirectory.FullName,
entityType.Name));
    entityDirectory = FSDirectory.Open(dir);
    writer = new IndexWriter(entityDirectory, new
StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true,
IndexWriter.MaxFieldLength.UNLIMITED);
    }
    finally
    {
    if (entityDirectory != null)
    {
        entityDirectory.Close();
    }

    if (writer != null)
    {
        writer.Close();
    }
    }

    var fullTextSession =
Search.CreateFullTextSession(NHibernateSession.Current);

    int totalCount =
NHibernateSession.Current.CreateCriteria(typeof(Publication)).SetProjection(
Projections.RowCount()).FutureValue<Int32>().Value;

    int pageSize = 500;
    int totalPages = totalCount / pageSize + 1;
    int currentPage = 0;

    do
    {
    IList<Publication> list =
NHibernateSession.Current.CreateCriteria(typeof(Publication)).SetFirstResult
(pageSize * (currentPage - 1)).SetMaxResults(pageSize *
currentPage).Future<Publication>().ToList();

    foreach (Publication p in list)
    {
        fullTextSession.Index(p);
    }
    currentPage++;
    }
    while (currentPage < totalPages);
}

The idea is to do the indexing in batches (improvement suggestions welcome)
as there are quite a lot of publications already in the relational database.
Unfortunately, I am getting this exception:

NHibernate.Search.Impl.SearchException was unhandled by user code
  Message=Unable to open IndexReader for EID2.Domain.PublicationX
  Source=NHibernate.Search

I have marked both classes with [Indexed].

Thanks.

Christian


Re: [Lucene.Net] inheritance in lucene .net

Posted by Anders Lybecker <an...@lybecker.com>.
Hi Christian,

This is NHibernate specific, so I guess you have a better chance in there
forum.

:-)
Anders Lybecker

On Mon, Nov 14, 2011 at 5:24 PM, Christian Setzkorn
<ch...@setzkorn.eu>wrote:

> I have a class Publication which has a child PublicationX. I am trying to
> index all instances of Publication like this:
>
> public void BuildSearchIndex()
> {
>    FSDirectory entityDirectory = null;
>    IndexWriter writer = null;
>
>    var entityType = typeof(Publication);
>
>    var indexDirectory = new DirectoryInfo(GetIndexDirectory());
>
>    if (indexDirectory.Exists)
>    {
>    indexDirectory.Delete(true);
>    }
>
>    try
>    {
>    var dir = new DirectoryInfo(Path.Combine(indexDirectory.FullName,
> entityType.Name));
>    entityDirectory = FSDirectory.Open(dir);
>    writer = new IndexWriter(entityDirectory, new
> StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), true,
> IndexWriter.MaxFieldLength.UNLIMITED);
>    }
>    finally
>    {
>    if (entityDirectory != null)
>    {
>        entityDirectory.Close();
>    }
>
>    if (writer != null)
>    {
>        writer.Close();
>    }
>    }
>
>    var fullTextSession =
> Search.CreateFullTextSession(NHibernateSession.Current);
>
>    int totalCount =
>
> NHibernateSession.Current.CreateCriteria(typeof(Publication)).SetProjection(
> Projections.RowCount()).FutureValue<Int32>().Value;
>
>    int pageSize = 500;
>    int totalPages = totalCount / pageSize + 1;
>    int currentPage = 0;
>
>    do
>    {
>    IList<Publication> list =
>
> NHibernateSession.Current.CreateCriteria(typeof(Publication)).SetFirstResult
> (pageSize * (currentPage - 1)).SetMaxResults(pageSize *
> currentPage).Future<Publication>().ToList();
>
>    foreach (Publication p in list)
>    {
>        fullTextSession.Index(p);
>    }
>    currentPage++;
>    }
>    while (currentPage < totalPages);
> }
>
> The idea is to do the indexing in batches (improvement suggestions welcome)
> as there are quite a lot of publications already in the relational
> database.
> Unfortunately, I am getting this exception:
>
> NHibernate.Search.Impl.SearchException was unhandled by user code
>  Message=Unable to open IndexReader for EID2.Domain.PublicationX
>  Source=NHibernate.Search
>
> I have marked both classes with [Indexed].
>
> Thanks.
>
> Christian
>
>