0

我正在使用 Lucene.NET 和 NHibernate.Search 为应用程序构建搜索功能。要索引现有数据,我使用此方法:

public void SynchronizeIndexForAllUsers()
    {
        var fullTextSession = Search.CreateFullTextSession(m_session);
        var users = GetAll();
        foreach (var user in users)
        {
            if (!user.IsDeleted)
            {
                fullTextSession.Index(user);
            }
        }
    }

我用以下属性标记了我想要索引的字段:

[Field(Index.Tokenized, Store = Store.Yes, Analyzer = typeof(StandardAnalyzer))]
public virtual string FirstName
    {
        get { return m_firstName; }
        set { m_firstName = value; }
    }

但是当我随后检查 Luke 中的索引时,这些字段仍然有大写字母、逗号等,它们应该已被 StandardAnalyzer 删除。

有谁知道我做错了什么?

4

1 回答 1

0

我遇到了与您类似的问题,但我一直在尝试使用 WhitespaceAnalyzer。在 Field 属性中设置它也对我不起作用。

我最终将其设置为全局。我正在使用 FluentNHibernate 进行配置,它看起来像这样:

this._sessionFactory =
    Fluently.Configure()
    .Database(MsSqlConfiguration.MsSql2005
        .ConnectionString(cs => cs
        // cut
    .ShowSql()
     )
     .Mappings(m => m.FluentMappings
     // cut
     )
     .ExposeConfiguration(cfg =>
     {
         // important part: lucene.net and nhibernate.search
         cfg.SetProperty("hibernate.search.default.directory_provider", typeof(NHibernate.Search.Store.FSDirectoryProvider).AssemblyQualifiedName);
         cfg.SetProperty("hibernate.search.default.indexBase", @"~\Lucene");
         cfg.SetProperty("hibernate.search.indexing_strategy", "event");
         cfg.SetProperty(NHibernate.Search.Environment.AnalyzerClass, typeof(WhitespaceAnalyzer).AssemblyQualifiedName);
         cfg.SetListener(NHibernate.Event.ListenerType.PostUpdate, new FullTextIndexEventListener());
         cfg.SetListener(NHibernate.Event.ListenerType.PostInsert, new FullTextIndexEventListener());
         cfg.SetListener(NHibernate.Event.ListenerType.PostDelete, new FullTextIndexCollectionEventListener());
     })
     .BuildSessionFactory();

看看 NHibernate.Search.Environment.AnalyzerClass。有趣的是,它不适用于通用全文查询(我认为 Lucene 将使用 StandardAnalyzer),但这是另一回事 :)。

希望这可以帮助。

于 2011-04-27T18:49:30.063 回答