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 回答