StandardAnalyzer sembra non essere coinvolti durante l'indicizzazione dei dati, NHibernate.Search

StackOverflow https://stackoverflow.com/questions/5802471

  •  24-10-2019
  •  | 
  •  

Domanda

Im la costruzione di una funzione di ricerca per un'applicazione con Lucene.NET e NHibernate.Search. Per indicizzare i dati esistenti Sto usando questo metodo:

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

Dove ho segnato i campi voglio indice con i seguenti attributi:

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

Ma quando poi ispezionare l'indicies in Luca campi hanno ancora uppercases, virgole ecc che avrebbe dovuto essere rimosso dal StandardAnalyzer.

Qualcuno ha sapere che cosa sto facendo male?

È stato utile?

Soluzione

Ho avuto problemi simile al tuo, ma ho cercato di utilizzare WhitespaceAnalyzer. Impostazione in campo attributo non ha funzionato per me.

Ho finito per impostarlo a livello globale. Sto usando FluentNHibernate per la configurazione e sembra che:

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();

Date un'occhiata a NHibernate.Search.Environment.AnalyzerClass. La cosa divertente è che non funzionerà per le query full-text generici (penso che Lucene utilizzerà StandardAnalyzer), ma questa è un'altra storia.)

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top