Pat*_*ick 5 java elasticsearch spring-data spring-boot spring-data-elasticsearch
我尝试在多个索引中搜索特定字段。我有两个索引country
和region
。这两个索引都有一个名为的字段name
。
我可以name
使用elasticsaerchTemplate
以下命令在查询中指定字段和索引:
@Override
public Page<SearchHit> searchAllTest(String text) {
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.should(QueryBuilders.queryStringQuery(text).field("name"));
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withIndices("region", "country").build();
ResultsExtractor<Page<SearchHit>> rs = new ResultsExtractor<Page<SearchHit>>() {
@Override
public Page<SearchHit> extract(SearchResponse response) {
List<SearchHit> hits = Arrays.asList(response.getHits().getHits());
return new PageImpl<SearchHit>(hits, PageRequest.of(0, 10), response.getHits().getTotalHits());
}
};
return elasticsearchTemplate.query(nativeSearchQuery, rs);
}
Run Code Online (Sandbox Code Playgroud)
此代码有效并在两个索引中搜索字段名称。但我想name
在索引中指定该字段,region
并提供例如增强功能。
简单来说:
name
属于索引region
并得到提升。name
属于索引country
,无法提升。有没有一种方法可以为特定索引指定字段?
尝试使用withIndexBoost
方法:
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withIndicesBoost(Arrays.asList(new IndexBoost[] {new IndexBoost("region", 2.0f)}))
.withIndices("region", "country").build();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1021 次 |
最近记录: |