spring-data-elasticsearch 在多个索引中搜索特定字段
Posted
技术标签:
【中文标题】spring-data-elasticsearch 在多个索引中搜索特定字段【英文标题】:Spring-data-elasticsearch search for specific fields in multiple indices 【发布时间】:2018-08-01 01:57:09 【问题描述】:我尝试在多个索引中搜索特定字段。我有两个索引country
和region
。这两个索引都有一个名为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() 的配置