1

フルテキスト検索機能を利用するために、Hibernate検索を使用してインデックスを作成したいエンティティがあります。エンティティには、フィルタリングする必要のあるいくつかのフィールドがあります。例として:

@Field(index = Index.TOKENIZED, store = Store.NO)
@Lob
private String description;

@Field(index = Index.UN_TOKENIZED, store = Store.NO)
@Enumerated(EnumType.STRING)
@NotNull
private Type type;

このdescriptionフィールドは、全文検索で使用したいものです。昔ながらのType試合をしたいフィールド。CriteriaBuilderLuceneが完全なテキスト検索を実行することに加えて、まっすぐなマッチングを処理する必要があること、および追加のフィルタリングを処理するようなものを使用する必要があることは、私には少し間違っていると感じます。ただし、この2つを組み合わせる方法が見つからずBooleanJunction、検索アルゴリズムで、、、および一致をまっすぐにする必要のあるフィールドで演算子mustmatching使用keywordすることに頼っています。

だから私の質問は、私はそれを正しくやっていますか、それともフルテキスト検索にのみLuceneを使用し、他の属性のフィルタリングを他の方法で行うべきですか?

どうもありがとう、フィンバー

4

1 に答える 1

1

@Finbarr、私の提案は、これにHibernateSearchを使用することです。タイプで結果をフィルタリングするには、Hibernate Search FullTextFilterを使用し、このクエリを実行する直前に「description」を検索するFullTextQueryでフィルタを有効にすることをお勧めします。ドキュメントが十分でない場合は、例を投稿できます。これらのフィルターを頻繁に使用しており、非常にうまく機能します。

于 2011-08-26T22:09:24.727 に答える