spring - 我不知道如何使用es7.12。许多功能不再可用
问题描述
我的排序无效,不知道为什么?同时我的代码看起来很乱,想优化,不知道怎么做。主要是排序问题。type 和 score 不起作用 总是按 createtime 排序,这不是我需要的 这里是相关代码: 测试代码: @Autowired DiscussPostRepository DiscussionPostRepository;
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Autowired
private ElasticsearchOperations elasticsearchOperations;
@Autowired
DiscussPostMapper discussPostMapper;
@Autowired
RestHighLevelClient client;
@Test
public void testSelect2() throws IOException {
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.multiMatchQuery("互联网寒冬", "title", "content"))
//sort
.withSort(SortBuilders.fieldSort("type").order(SortOrder.DESC))
.withSort(SortBuilders.fieldSort("score").order(SortOrder.DESC))
.withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC))
//paging
.withPageable(PageRequest.of(0, 10))
//Highlight, Adding it here doesn't seem to work
.withHighlightFields(
new HighlightBuilder.Field("title").preTags("<em>").postTags("</em>"),
new HighlightBuilder.Field("content").preTags("<em>").postTags("</em>")
).build();
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("discusspost");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
HighlightBuilder highlightBuilder = new HighlightBuilder();
HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title");
highlightTitle.highlighterType("unified");
highlightBuilder.field(highlightTitle);
HighlightBuilder.Field highlightContent = new HighlightBuilder.Field("content");
highlightBuilder.field(highlightContent);
searchSourceBuilder.highlighter(highlightBuilder);
//Type and score cannot be sorted effectively
searchSourceBuilder.sort(new FieldSortBuilder("type").order(SortOrder.DESC));
searchSourceBuilder.sort(new FieldSortBuilder("score").order(SortOrder.DESC));
//Only createtime works
searchSourceBuilder.sort(new FieldSortBuilder("createTime").order(SortOrder.DESC));
searchSourceBuilder.query(build.getQuery());
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);
System.out.println(searchResponse.toString()); }
实体:</p>
@Document(indexName = "discusspost", shards = 6, replicas = 3)
public class DiscussPost {
@Id
private int id;
@Field(type = FieldType.Integer)
private int userId;
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
private String title;
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
private String content;
@Field(name = "type",type = FieldType.Integer)
private int type;
@Field(type = FieldType.Integer)
private int status;
@Field(name = "createTime",type = FieldType.Date)
private Date createTime;
@Field(type = FieldType.Integer)
private int commentCount;
@Field(name = "score",positiveScoreImpact = false,type = FieldType.Double)
private double score;
}
@Repository
public interface DiscussPostRepository extends ElasticsearchRepository<DiscussPost,Integer> {
}
@Configurable
public class ElasticSearchConfig {
public static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
COMMON_OPTIONS = builder.build();
}
@Bean
public RestHighLevelClient esRestClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
查了一些资料,还是不知道怎么弄
解决方案
推荐阅读
- jenkins - 使用 Jenkins Pipeline 将 Docker Image 传输到 Docker Hub 时出错
- sql - 使用 JOIN 将多个表中的数据合并到一个统一的表中进行导出
- c++11 - OpenCL 1.2 命名空间 cl 中没有成员错误
- java - 创建相同活动时销毁活动
- python - 将VTK插入布局的正确位置
- azure - Azure 服务总线队列大小为最大值
- json - 从另一个 json 模式引用 json 模式元素
- python - 我在相机中检测到物体后如何采取适当的措施?
- reactjs - OAuth 的 Google.logInAsync 函数在 React Native 中没有做任何事情
- html - 图片将我带到一个没有附加链接的网页