2

エンティティのインデックス作成時にカスタム アナライザーを使用するように Hibernate-Search を構成しました。ただし、QueryDSL の Hibernate-Search 統合を使用して検索しようとすると、エンティティが見つかりませんが、単純な hibernate-search を使用すると何かが見つかります。

@AnalyzerDef(name = "customanalyzer",
    tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
    filters = {
            @TokenFilterDef(factory = LowerCaseFilterFactory.class),
            @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
                    @Parameter(name = "language", value = "English")
            })
    })
@Analyzer(definition = "customanalyzer")
public abstract class Post extends BaseEntity {}

「怠惰な犬を飛び越えた素早い茶色のキツネ」というタイトルのエンティティを索引付けしました。

これらは機能します...</p>

List articlePosts = fullTextEntityManager.createFullTextQuery(queryBuilder.keyword().onFields("title").matching("jumped").createQuery(), ArticlePost.class).getResultList(); // list of 2
List articlePosts = fullTextSession.createFullTextQuery(queryBuilder.keyword().onFields("title").matching("jumped").createQuery(), ArticlePost.class).getResultList(); // list of 2

これは…</p>

SearchQuery<ArticlePost> query = new SearchQuery<ArticlePost>(this.entityManagerFactory.createEntityManager().unwrap(HibernateEntityManager.class).getSession(), post);
List articlePosts = query.where(post.title.contains("jumped")).list() // empty list

しかし、Lucene にどのように保存されている可能性があるかを検索すると (SnowballPorter の結果と思われます)、うまくいきます…</p>

SearchQuery<ArticlePost> query = new SearchQuery<ArticlePost>(this.entityManagerFactory.createEntityManager().unwrap(HibernateEntityManager.class).getSession(), post);
List articlePosts = query.where(post.title.contains("jump")).list() // list of 2

そのため、QueryDSL を使用している場合、クエリを実行する前にアナライザーが実行されていないように見えます。誰でもこれが問題であることを確認できますか? QueryDSL がクエリを実行する前にそれらを自動的に実行する方法はありますか?

4

1 に答える 1

0

あなたの質問に関して、クエリDSLを使用する場合、アナライザーはデフォルトで適用されます。ほとんどの場合、インデックス作成と検索に同じアナライザーを使用するのが理にかなっています。このため、「ignoreAnalyzer」が使用されない限り、アナライザーはデフォルトで適用されます。

2 番目の例がうまくいかない理由はわかりません。SearchQueryは、Hibernate Search または ORM API の一部ではありません。アプリケーションの内部クラスである必要があります。このクラスで何が起こっているのですか?どのタイプのクエリを使用していますか?

于 2012-10-24T15:53:56.487 に答える