Lucene没有遍历索引中的模型



以下是我的代码的基本概要:

@Entity
@Indexed
public class Document {
  @IndexedEmbedded
  @OneToMany(cascade = { PERSIST, MERGE }, mappedBy = "owner")
  private final Set<Issue> issues = new LinkedHashSet<Issue>();
}
@Entity
public class Issue {
  @ManyToOne
  @JoinColumn(name = "owner_id")
  @ContainedIn
  private final Document owner;
  @IndexedEmbedded
  @OneToOne(cascade = ALL, optional = false)
  @JoinColumn(name = "name_id")
  @ForeignKey(name = "FK_issue__name_id__text_element")
  private final TextElement name = new TextElement();
}
@Entity
public class TextElement {
  @OneToMany(cascade = { CascadeType.ALL })
  @JoinTable(
    name = "text_element_paragraph",
    joinColumns = { @JoinColumn(name = "text_element_id") },
    inverseJoinColumns = { @JoinColumn(name = "paragraph_id") },
    uniqueConstraints = { 
    @UniqueConstraint(
     name = "UX_text_element_paragraph__paragraph_id", 
     columnNames = "paragraph_id"        
    )
   }
  )
  @ForeignKey(
    name = "FK_text_element_paragraph__text_element_id__text_element",
    inverseName = "FK_text_element_paragraph__paragraph_id__paragraph"
  )
  @IndexedEmbedded
  private List<Paragraph> paragraphs = new LinkedList<Paragraph>();
}
@Entity
public class Paragraph {
  @Field(name = "data", analyze = Analyze.YES)
  @Column(name = "s_data", nullable = false)
  private String data;
}

我原以为lucene会对Paragraph中的数据进行索引,但当我打开Luke时,它显示"issues.name.id"(id来自Documentextends类)。为什么不对数据编制索引?谢谢:)

我还应该注意,我刚刚从CRUD服务的更新方法中删除了一个手动索引器。在那之后,一切都停止了工作,这可能是我的配置造成的吗?

通过在TextElement中添加以下内容,我可以进行搜索:

@ContainedIn
private Document owner 

我认为所有实体都必须注释为@Indexed,否则@IndexEmbedded将无法识别要索引的实体。

顺便说一句:深度遍历可能会导致重新索引的问题。你需要回到@ContainedIn。。。

最新更新