我有以下带注释的类,我正在尝试对来自 lucene/hibernate 搜索查询的结果进行排序。我终于让查询正常工作,但似乎当我实现必要的注释(在 jobStatus 上看到)对该列进行排序时,它使得无法搜索该列。我基于我找到的说明 here on google .我在计算整个 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;
还有来自搜索功能的一个片段
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();
最佳答案
Hibernate 搜索文档提供了一个类似于 Adam 解决方案的解决方案。
https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#fields-annotation
基本上使用两个@Field 注释对一个字段进行两次索引,一次使用Analyze.NO 进行排序,一次使用Analyze.YES 进行搜索。
@Entity
@Indexed(index = "Book")
public class Book {
@Field
@Field(name = "summary_forSort", analyze = Analyze.NO, store = Store.YES)
@SortableField(forField = "summary_forSort")
public String getSummary() {
return summary;
}
// ...
}
analyze:确定属性是否被分析(Analyze.YES)或不被分析(Analyze.NO)。默认值为 Analyze.YES。
提示
您是否要分析属性取决于您是希望按原样搜索元素,还是通过它包含的词来搜索。分析文本字段是有意义的,但可能不是日期字段。
提示
不得分析用于排序或分面的字段。
关于java - 您可以使用 Hibernate/Lucene 对同一字段进行排序和搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18195367/