0

私は @ClassBridge を実装しており、私のクラスは次のとおりです。

@Entity
@Table(name = "metaentity")
@Indexed
@ClassBridge(name="metaentityinedx",index=Index.TOKENIZED,store=Store.YES,impl = CustomBridge.class)
public class Metaentity implements java.io.Serializable {
private Long id;
@Field
private String type;
@Field
private String title;
private Set<Comment> comments = new HashSet<Comment>(0);

public Metaentity() {
}

public Metaentity(ntityByProject, String type, String title) {
    this.type = type;
    this.title = title;
}

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

@Column(name = "type", nullable = false, length = 45)
public String getType() {
    return this.type;
}

public void setType(String type) {
    this.type = type;
}

@Column(name = "title", nullable = false, length = 45)
public String getTitle() {
    return this.title;
}

public void setTitle(String title) {
    this.title = title;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "metaentity")
public Set<Comment> getComments() {
    return this.comments;
}

public void setComments(Set<Comment> comments) {
    this.comments = comments;
}

}

私の CustomBridge.java は次のとおりです。

public class CustomBridge implements FieldBridge {

    @Override
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
        String hasComment="false";
        Metaentity metaentity = (Metaentity) value;
        Set<Comment> commentset = metaentity.getComments();
        if(commentset.size()>0)
            hasComment = "true";
        luceneOptions.addFieldToDocument("hasComments",hasComment, document);
    }
}

私がCustomBridgeクラスで行ったことは、メタエンティティコメント>0があり、 hascommentsフィールドを true に設定し、それ以外の場合は false に設定することです。これにより、インデックスにhascommentフィールドが正しく作成されます。

しかし、リストを作成しているときは、インデックスを作成したhascommentフィールドではなく、 Metaentityクラスにあるフィールドのみが表示されます。metaentityを持つhascommentフィールドが必要です。

hasCommentフィールドで定義したメタエンティティフィールドが必要な場合にできること。私が使用したリストを行うには:

   FullTextSession fullTextSession = Search.getFullTextSession(session);
     Transaction tx = fullTextSession.beginTransaction();
       QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Metaentity.class).get();                              
       org.apache.lucene.search.Query luceneQuery =  qb.keyword().onFields("hasComments").matching("true").createQuery();
        org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(luceneQuery, Metaentity.class);
        List result = hibQuery.list();

        Iterator<Metaentity> itr = result.iterator();

クエリパーサーを使用せずに lucene クエリを参照してください。要するに、customBridge クラスで、メタエンティティのインデックスに新しいフィールド「hascomment」を追加しました。検索を行っているときに、「hascomment」フィールドを持つメタエンティティクラスのすべてのフィールドが必要インデックス ドキュメントに追加されました。

4

0 に答える 0