【发布时间】:2017-12-03 08:36:16
【问题描述】:
我正在使用带有 spring-data-elastic 的 elasticsearch。并尝试使用多重搜索。问题是在使用类字段搜索 wprking 时,它不适用于嵌套字段。我的映射如下所示
{
"archieve": {
"mappings": {
"author": {
"properties": {
"books": {
"type": "nested",
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "string",
"analyzer": "standard"
}
}
},
"id": {
"type": "long"
},
"firstName": {
"type": "string",
"analyzer": "standard"
},
"lastName": {
"type": "string",
"analyzer": "standard"
}
}
}
}
}
}
我有一个带有 searchQuery 的端点,例如:
@GetMapping(value = "/es/archieve/multi/{keyword}")
public Page<Author> getBrandMulti(@PathVariable String keyword, Pageable pageable) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.multiMatchQuery(keyword)
.field("firstName", 1.2f)
.field("books.name", 1.1f)
.type(MultiMatchQueryBuilder.Type.CROSS_FIELDS)
.fuzziness(Fuzziness.TWO)
)
.withIndices("archieve")
.withTypes("author")
.withPageable(pageable)
.build();
return elasticsearchTemplate.queryForPage(searchQuery, Author.class);
}
问题是查询不适用于嵌套字段。有什么建议吗?
更新
其实嵌套对象可以查询为
NativeSearchQueryBuilder()
.withQuery(QueryBuilders.nestedQuery("books",
QueryBuilders.termQuery("books.name", searchKey)))
有没有办法连接两个查询,比如
NativeSearchQueryBuilder()
.withQuery(Query1)
.withQuery(Query1)
.build();
【问题讨论】:
标签: elasticsearch spring-boot spring-data-elasticsearch