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

Posted

技术标签:

【中文标题】spring-data-elasticsearch 在多个索引中搜索特定字段【英文标题】:Spring-data-elasticsearch search for specific fields in multiple indices 【发布时间】:2018-08-01 01:57:09 【问题描述】:

我尝试在多个索引中搜索特定字段。我有两个索引countryregion。这两个索引都有一个名为name 的字段。

我可以使用elasticsaerchTemplate 在查询中指定我的字段name 和我的索引:

@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);

此代码有效并在两个索引中搜索字段名称。但我想在索引region 中指定字段name 并举个例子。

简单来说:

字段name 属于索引region 并获得提升。 字段 name 属于索引 country 并且没有提升。

有没有办法为特定索引指定字段?

【问题讨论】:

您可以在索引级别进行查询时间提升。 elastic.co/guide/en/elasticsearch/guide/current/… 或字段级别的索引时间提升,elastic.co/guide/en/elasticsearch/reference/current/…(虽然不推荐使用索引时间提升) 【参考方案1】:

尝试使用withIndexBoost方法:

NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder)
        .withIndicesBoost(Arrays.asList(new IndexBoost[] new IndexBoost("region", 2.0f)))
        .withIndices("region", "country").build();

【讨论】:

以上是关于spring-data-elasticsearch 在多个索引中搜索特定字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-data-elasticsearch 的多租户

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

springboot 集成 spring-data-elasticsearch

nodeBuilder() 已被 Elasticsearch 删除,但 spring-data-elasticsearch 文档仍然包含使用 nodeBuilder() 的配置

Elastic实战:彻底解决spring-data-elasticsearch日期时间类型数据读取报错问题

工作记录springboot集成spring-data-elasticsearch访问es及问题解决