Ada*_*mes 4 java sorting lucene hibernate hibernate-search
我有以下带注释的类,我试图从lucene/hibernate搜索查询中对结果进行排序.我终于让查询正常工作但似乎当我实现必要的注释(在jobStatus上看到)对该列进行排序时,它使得无法再搜索该列.我基于谷歌在这里找到的说明.我一直在解决整个hibernate搜索和排序问题,现在我终于想出如何排序和搜索我需要的是能够一起完成它们.
@Entity
@Table(name="jobReq")
@Indexed
public class JobReq {
@Id
@DocumentId
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Field(index = Index.YES)
@Column(name="jobId", nullable=false, unique=true)
private String jobId;
@Field(index = Index.YES)
@Column(name="jobTitle", nullable=false)
private String jobTitle;
@Field(index = Index.YES)
@Column(name="jobContract", nullable=false)
private String contract;
@Field(index = Index.YES)
@Column(name="jobProject", nullable=true)
private String project;
@Field(index = Index.YES)
@Column(name="jobLaborCategory", nullable=false)
private String laborCategory;
@Field(index = Index.YES)
@Column(name="jobSummary", nullable=false)
private String summary;
@Field(index = Index.YES)
@Column(name="jobDescription", nullable=false)
private String jobDescription;
@Fields({@Field, @Field(analyze = Analyze.NO, name = "jobStatus")})
@Column(name="jobStatus", nullable=false)
private String status;
@Field(index = Index.YES)
@Column(name="TTONumber", nullable=false)
private String TTONumber;
@Field(index = Index.YES)
@Column(name="jobPostedDate", nullable=false)
@Type(type="date")
private Date postedDate;
Run Code Online (Sandbox Code Playgroud)
以及搜索功能的片段
Field[] allFields = this.type.getDeclaredFields();
SortField field =new SortField(sortColumn, SortField.STRING, reverseSort);
Sort sort = new Sort(field);
hibQuery = fullTextSession.createFullTextQuery(bq, this.type).setSort(sort);
results = hibQuery.list();
Run Code Online (Sandbox Code Playgroud)
Hibernate搜索文档提供了类似于Adam解决方案的此问题的解决方案.
http://docs.jboss.org/hibernate/search/4.5/reference/en-US/html_single/#d0e3165
基本上使用@Fields注释将字段索引两次,使用Analyze NO进行排序,使用analyze YES进行搜索一次.
@Entity
@Indexed(index = "Book")
public class Book {
@Fields( {
@Field,
@Field(name = "summary_forSort", analyze = Analyze.NO, store = Store.YES)
} )
public String getSummary() {
return summary;
}
...
}
Run Code Online (Sandbox Code Playgroud)
analyze:确定是否分析属性(Analyze.YES)(Analyze.NO).默认值为Analyze.YES.提示是否要分析属性取决于您是希望按原样搜索元素,还是按照其包含的字词搜索元素.分析文本字段是有意义的,但可能不是日期字段.提示不得分析用于排序或分面的字段.
归档时间: |
|
查看次数: |
3892 次 |
最近记录: |