2012-06-05 2 views
1
@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; 
} 

내 검색 코드 색인을 생성하지 않습니다 @IndexedEmbedded 것은 :최대 절전 모드 검색

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"는 "프로그램 응용"과 "설명"결과를 가지고 있지만 하나의 일치 "유형입니다. name "또는"catalogs.name "에 결과가 없습니다.

엔티티 AppType이 인덱싱되지 않았습니까? 당신이 APPTYPE뿐만 아니라 색인화해야을 @IndexedEmbedded 사용하고 있기 때문에

+0

@Indexed 주석도 AppType에 추가해야합니다. – gmansoor

답변

2

코드는 지금까지 확인보고. 왜 그렇지 않다고 생각하니? Lucene 색인을 Luke으로 검사하여 내용을 확인 했습니까? 이 방법으로 type.name이 인덱스에 있는지 확인할 수 있으며 인덱싱 된 토큰을 볼 수도 있습니다. 종종 분석기에 문제가 있습니다. 분석기에 따라 색인에서 검색 가능한 토큰이 예상 한 것과 다를 수 있습니다.

+0

고마워. 루크를 사용하여 확인하는 방법을 배웁니다. "사용 가능한 필드"에는 type.id, catalogs.id가 들어 있지만 type.name, catalogs.name은 포함되지 않습니다. –

+0

이름 필드가 _null_이 아닌 것은 확실합니다. 색인에 _type.id_ 및 _catalogs.id_가 있으면 포함 된 색인 생성이 실행 된 것처럼 보입니다. 색인 생성에 사용하는 코드를 추가하면 도움이 될 수 있습니다. 디버그 또는 추적 로깅을 설정할 수도 있습니다. 그러면 어떤 데이터가 인덱싱되는지 확인해야합니다. – Hardy

+0

데이터가 데이터베이스에 저장되었습니다. { "id": 150, "district": 1, "appName": "appName", "thumbnail": "축소판", "통계": null, "description": "description", "게시자": 1, "publishAt": 1339472381703, "유형": { "id": 1, "이름": "웹"}, "카탈로그": [{ "id": "name": "성" 1 ","상태 ": 1,"상태 ": 1,"isPopular ","부모 ": 1, ": 1} –

0

AppType 클래스에 @Indexed 어노테이션을 추가하십시오.

관련 문제