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

9

我尝试在多个索引中搜索特定字段。我有两个索引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,并给出一个boost值。
简单来说:
  • 字段name属于索引region,并获得了boost。
  • 字段name属于索引country,没有获得boost。
有没有一种方法可以为特定的索引指定字段?

您可以在索引级别进行查询时间加权。https://www.elastic.co/guide/en/elasticsearch/guide/current/query-time-boosting.html 或者在字段级别进行索引时间加权,https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-boost.html(虽然不推荐使用索引时间加权)。 - sammy
1个回答

3
尝试使用withIndexBoost方法:
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder)
        .withIndicesBoost(Arrays.asList(new IndexBoost[] {new IndexBoost("region", 2.0f)}))
        .withIndices("region", "country").build();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接