0

我在这个问题中粘贴了错误,这是真的:没有 Sugestao 索引。正确的名称是 sugestao(记下 S 与 s)。

据我所知,我无法创建大写索引。到目前为止,一切都很好。问题是:如何“强制”spring-data-elasticsearch 搜索 sugestao 而不是 Sugestao,因为我的模型是大写的 java 类?我猜它会自动选择大写字母。

在 Spring-Data-Elasticsearch-3.2.6 (Elastic version 6.x) 我可以看到 find 有一个清晰的设置方式

reactiveElasticsearchOperations.find(
query.build(),
Sugestao.class, // this is the model class
"this_is_my_index_name" //here I can write the name of the index with lower case
)

我如何在 Spring-data-Elasticsearch.4(Elastic 版本 7.x)中做类似的方法我正在尝试搜索,因为不推荐使用 find

    Flux<SearchHit<Sugestao>> fluxSearchHits =
            reactiveElasticsearchOperations.search(query.build(), Sugestao.class, "sugestao");

我得到

ReactiveSearchOperations 类型中的方法 search(Query, Class, Class) 不适用于参数 (NativeSearchQuery, Class, String)

一些相关的子问题是:

  • 似乎在不推荐使用的 Find 版本中我可以传递一个字符串,现在在搜索中它需要一个类。但是要设置索引名称的是哪个类?

  • 也许我可以在其他 spring-data-elasticsearch 配置中设置索引的名称或将其设置为使用小写,然后我可以在不添加索引名称的情况下进行搜索。

    通量>fluxSearchHits = reactiveElasticsearchOperations.search(query.build(), Sugestao.class);

4

1 回答 1

1

我想你的实体类上没有@Document注释?

@Document(indexName="sugestao")
public class Sugestao {
  // class stuff
}

然后你可以打电话

Flux<SearchHit<Sugestao>> fluxSearchHits =
        reactiveElasticsearchOperations.search(query.build(), Sugestao.class);

如果要明确指定索引名称,可以使用

Flux<SearchHit<Sugestao>> fluxSearchHits =
        reactiveElasticsearchOperations.search(query.build(), 
                Sugestao.class, IndexCoordinates.of("sugestao");

API 文档记录ReactiveSearchOperations了不同的方法。

于 2020-05-16T05:50:32.187 回答