2
@Entity
@Indexed
@SequenceGenerator(name="subjectSeq", sequenceName="subjectSeq")
public class AppInfo {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="subjectSeq")
    public Integer id;

    public Integer district;

    @Field
    @Boost(2.0f)
    public String appName;

    public String thumbnail;

    public Integer statistics;

    @Field
    public String description;

    public Integer publisher;

    public Date publishAt = new Date();

    @ManyToOne
    @IndexedEmbedded
    @Boost(1.5f)
    @JoinColumn(name="type")
    public AppType type;

    @ManyToMany
    @JoinTable(name="appInfo_appCatalog",
    joinColumns={@JoinColumn(name="info_id", referencedColumnName="id")},
    inverseJoinColumns={@JoinColumn(name="catalog_id", referencedColumnName="id")})
    @IndexedEmbedded
    @Boost(1.5f)
    public List<AppCatalog> catalogs;
}

@Entity
@SequenceGenerator(name="appTypeSeq", sequenceName="appTypeSeq")
public class AppType {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="appTypeSeq")
    public Integer id;

    @Field
    public String name;
}

私の検索コードは次のとおりです。

QueryBuilder qb = fullTextEntityManager.getSearchFactory()
            .buildQueryBuilder().forEntity( AppInfo.class ).get();
org.apache.lucene.search.Query query = qb
              .keyword().fuzzy()
              .onFields("appName", "description", "type.name", "catalogs.name")
              .matching(searchString)
              .createQuery();

問題は、フィールド「appName」と「description」に一致する「searchString」には結果がありますが、「type.name」または「catalogs.name」に一致するものには結果がありません。

エンティティ AppType はインデックス化されていませんか?

4

2 に答える 2

2

コードはこれまでのところ問題ないように見えます。@IndexedEmbedded を使用しているためAppTypeもインデックス化する必要があります。なぜそうではないと思いますか?内容を確認するために、 Lukeで Lucene インデックスを調べましたか? このようにして、type.name がインデックスにあることを確認し、どのトークンがインデックスされているかを確認できます。多くの場合、アナライザーにも問題があります。使用しているアナライザーによっては、インデックスで検索可能なトークンが期待どおりにならない場合があります。

于 2012-06-07T10:34:09.220 に答える
-1

AppType クラスに @Indexed アノテーションを追加します。

于 2014-12-04T03:34:15.220 に答える