Hibernate Search @IndexedEmbedded没有索引

时间:2012-06-05 08:17:09

标签: hibernate search indexing hibernate-search

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

问题是“searchString”匹配字段“appName”和“description”有结果,但匹配“type.name”或“catalogs.name”的字段没有结果

实体AppType是否未编入索引?

2 个答案:

答案 0 :(得分:2)

代码看起来还不错,因为您使用的是 @IndexedEmbedded ,所以 AppType 也应该被编入索引。为什么你认为不是?您是否使用Luke检查了Lucene索引以检查内容?这样,您可以验证type.name是否在索引中,以及是否还可以查看索引的标记。通常,分析仪也存在问题。根据您在索引中使用可搜索令牌的分析器,可能不是您所期望的。

答案 1 :(得分:0)

在AppType类上添加@Indexed注释。