StandardAnalyzerは、データのインデックス作成時に関与していないようです。
-
24-10-2019 - |
質問
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; }
}
しかし、ルークの指標を検査するとき、畑にはまだ大文字、コンマなどがあります。これは標準分析器によって削除されるべきでした。
誰かが私が間違っていることを知っていますか?
解決
私はあなたと同様の問題を抱えていましたが、私はホワイトスパースアナリザーを使用しようとしています。フィールド属性に設定することも、私にとってもうまくいきませんでした。
私はそれをグローバルに設定することになりました。私は構成に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を使用すると思います)が、それは別の話です:)。
お役に立てれば。
所属していません StackOverflow