首先说下问题 本来搜索是按关键字的匹配次数排序的 但是那边用户要求按时间降序排序 试了好久 还是不行
首先贴出封装的存储类
@Searchable
public class SearchableTopic {
/** 新闻ID */
@SearchableId
private String newsId;
/** 稿件标题 */
@SearchableProperty(index = Index.ANALYZED, store = Store.YES, name = "newsTitle")
private String newsTitle;
/** 稿件正文 */
@SearchableProperty(index = Index.ANALYZED, store = Store.YES , name = "newsContent")
private String newsContent;
/** 稿件发表时间 */
@SearchableProperty(index = Index.NOT_ANALYZED, store = Store.YES, format = "yyyy-MM-dd HH:mm")
private Date submitTime;
/** 稿件发表栏目 */
@SearchableProperty(index = Index.NOT_ANALYZED, store = Store.YES, name = "columnName")
private String columnName;
public SearchableTopic() {
} 省略getter/setter方法 这是需要存储的几个属性 在搜索的时候我需要按时间排序
}
在另一个类中我封装了构建CompassQuery对象public CompassQuery buildCompassQuery(CompassQueryBuilder queryBuilder) {
CompassBooleanQueryBuilder boolQueryBuilder = queryBuilder.bool().
addMust(queryBuilder.alias(SearchableTopic.class.getSimpleName())); if(searchType == 0){
//在文章的标题和内容中进行查询 queryString查询关键字
boolQueryBuilder.addMust(queryBuilder.term("newsTitle", queryString))
.addMust(queryBuilder.term("shortTitle", queryString))
.addMust(queryBuilder.term("newsContent", queryString));
} else if(searchType == 1){
//查询指定部门的文章
CompassQuery deptQuery = queryBuilder.term("departmentName", queryString);
boolQueryBuilder.addMust(deptQuery);
} else if(searchType == 2){
//查询指定栏目的文章
CompassQuery columnQuery = queryBuilder.term("columnName", queryString);
boolQueryBuilder.addMust(columnQuery);
} else {
//查询指定作者发表的文章
CompassQuery authorQuery = queryBuilder.term("authorName", queryString);
boolQueryBuilder.addMust(authorQuery);
}
//默认是指定按时间排序
if(sortType == 0){
boolQueryBuilder.toQuery()
.addSort("submitTime", CompassQuery.SortPropertyType.INT,CompassQuery.SortDirection.REVERSE);
}
return boolQueryBuilder.toQuery();
}最后就是通过CompassQuery得到CompassHits就可以遍历得到结果了
最主要的代码还是在构建CompassQuery那段代码中 最后我用了addSort还是不行 不知道这跟每一条新闻的索引存储顺序是否有关 跪求大神指点指点 到底按时间(submitTime)排序该怎么写
首先贴出封装的存储类
@Searchable
public class SearchableTopic {
/** 新闻ID */
@SearchableId
private String newsId;
/** 稿件标题 */
@SearchableProperty(index = Index.ANALYZED, store = Store.YES, name = "newsTitle")
private String newsTitle;
/** 稿件正文 */
@SearchableProperty(index = Index.ANALYZED, store = Store.YES , name = "newsContent")
private String newsContent;
/** 稿件发表时间 */
@SearchableProperty(index = Index.NOT_ANALYZED, store = Store.YES, format = "yyyy-MM-dd HH:mm")
private Date submitTime;
/** 稿件发表栏目 */
@SearchableProperty(index = Index.NOT_ANALYZED, store = Store.YES, name = "columnName")
private String columnName;
public SearchableTopic() {
} 省略getter/setter方法 这是需要存储的几个属性 在搜索的时候我需要按时间排序
}
在另一个类中我封装了构建CompassQuery对象public CompassQuery buildCompassQuery(CompassQueryBuilder queryBuilder) {
CompassBooleanQueryBuilder boolQueryBuilder = queryBuilder.bool().
addMust(queryBuilder.alias(SearchableTopic.class.getSimpleName())); if(searchType == 0){
//在文章的标题和内容中进行查询 queryString查询关键字
boolQueryBuilder.addMust(queryBuilder.term("newsTitle", queryString))
.addMust(queryBuilder.term("shortTitle", queryString))
.addMust(queryBuilder.term("newsContent", queryString));
} else if(searchType == 1){
//查询指定部门的文章
CompassQuery deptQuery = queryBuilder.term("departmentName", queryString);
boolQueryBuilder.addMust(deptQuery);
} else if(searchType == 2){
//查询指定栏目的文章
CompassQuery columnQuery = queryBuilder.term("columnName", queryString);
boolQueryBuilder.addMust(columnQuery);
} else {
//查询指定作者发表的文章
CompassQuery authorQuery = queryBuilder.term("authorName", queryString);
boolQueryBuilder.addMust(authorQuery);
}
//默认是指定按时间排序
if(sortType == 0){
boolQueryBuilder.toQuery()
.addSort("submitTime", CompassQuery.SortPropertyType.INT,CompassQuery.SortDirection.REVERSE);
}
return boolQueryBuilder.toQuery();
}最后就是通过CompassQuery得到CompassHits就可以遍历得到结果了
最主要的代码还是在构建CompassQuery那段代码中 最后我用了addSort还是不行 不知道这跟每一条新闻的索引存储顺序是否有关 跪求大神指点指点 到底按时间(submitTime)排序该怎么写
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货