package org.hibernate.search.demos.wikipedia.data;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import org.apache.lucene.analysis.charfilter.HTMLStripCharFilterFactory;
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.core.StopFilterFactory;
import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
import org.apache.lucene.analysis.en.PorterStemFilterFactory;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Analyzer;
import org.hibernate.search.annotations.AnalyzerDef;
import org.hibernate.search.annotations.CharFilterDef;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.TokenFilterDef;
import org.hibernate.search.annotations.TokenizerDef;
@Entity
@Indexed(index = "page")
/*
* Note: analyzer definitions are globally available,
* you don't need to repeat them for each single entity.
*/
@AnalyzerDef(
name = "cleaned_text",
charFilters = {
@CharFilterDef(
factory = HTMLStripCharFilterFactory.class
)
},
tokenizer = @TokenizerDef(
factory = WhitespaceTokenizerFactory.class
),
filters = {
@TokenFilterDef(
factory = ASCIIFoldingFilterFactory.class
),
@TokenFilterDef(
factory = LowerCaseFilterFactory.class
),
@TokenFilterDef(
factory = StopFilterFactory.class
),
@TokenFilterDef(
factory = PorterStemFilterFactory.class
)
}
)
public class Page {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pageId")
@SequenceGenerator(name = "pageId", sequenceName = "page_id_seq")
private Long id;
@Basic(optional = false)
@Field(analyzer = @Analyzer(definition = "cleaned_text"))
private String title;
@Basic(optional = false)
@Type(type = "text")
@Field(analyzer = @Analyzer(definition = "cleaned_text"))
private String content;
@ManyToOne
@IndexedEmbedded
private User lastContributor;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public User getLastContributor() {
return lastContributor;
}
public void setLastContributor(User lastContributor) {
this.lastContributor = lastContributor;
}
}