Spring-data-elasticsearch在多个索引中搜索特定字段

Pat*_*ick 5 java elasticsearch spring-data spring-boot spring-data-elasticsearch

我尝试在多个索引中搜索特定字段。我有两个索引countryregion。这两个索引都有一个名为的字段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,无法提升。

有没有一种方法可以为特定索引指定字段?

Mik*_*neu 3

尝试使用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)