java - 弹性搜索 JPA 存储库不提供 findAll 和 findBy... 方法的结果
问题描述
我在弹性搜索中使用 spring-data-elasticsearch 进行 crud 操作。
只能将数据保存到弹性搜索并且 findById 方法有效。
findAll 和 findBy... 方法不起作用,并给出空响应。
我尝试在 POM 中使用其他版本
经过一些调试,我发现 findById 方法实际上是在发送 HTTP GET 请求,而 findAll/findBy... 是在发送 HTTP POST 请求。
在这两种情况下,GET/POST 弹性搜索都返回带有数据的响应,我在wireshark 上验证了这些数据。在本地运行。我可以在wireshark上看到响应findAll方法调用的命中,但我们没有通过存储库接收到命中。
如果我可以看到数据的响应,这意味着弹性搜索和查询创建很好,但问题在于在 JPA 中使用数据。JPA实际上是在处理消费的事情。
我不知道如何进一步调试。
数据模型类
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "data", type = "_doc")
public class Data {
@Id
private String id;
private String title;
@Field(type = FieldType.Text)
private Status status;
private String description;
}
存储库类
@Repository
public interface DataRepository extends ElasticsearchRepository<Data,String> {
default <S extends Data> S saveWithKafkaPush(S s){
S s1 = save(s);
KafkaProducer.produceMessage(s);
return s1;
}
default <S extends Data> Iterable<S> saveAllWithKafkaPush(Iterable<S> iterable){
Iterable<S> s = saveAll(iterable);
return s;
}
Optional<Data> findByStatus(Status status);
}
状态枚举
public enum Status {
UNTITLED,
DRAFT,
REVIEW,
APPROVED,
PUBLISHED;
}
服务等级
@Autowired
private DataRepository dataRepository;
public Data findByStatus(Status status){
Optional<Data> data = dataRepository.findByStatus(status);
return data.isPresent()? data.get() : null;
}
public Data save(Data data){
return dataRepository.save(data);
}
public void deleteData(String id){
dataRepository.deleteById(id);
}
findByStatus 方法不起作用,但保存和 deleteData 工作正常。
解决方案
推荐阅读
- android - RecyclerView 在 BottomSheetFragment 中隐藏其下方的项目
- c# - 使用 .net 核心控制台应用程序创建具有 777 权限的文件
- elixir - phoenix 中是否有用于 arangodb 的 Ecto 包装器?
- xml - XML Powershell 获取和删除元素节点
- spring - Spring - 包结构 - [.../component/layer] 与 [.../layer/component]
- python - 使用短语中的信息查找句子中单词的索引
- json - 将 JSON 转换为 Pandas 数据帧,允许复杂的 dict 结构
- c++ - 尝试更改 TargetArmLength 时崩溃(虚幻引擎 C++)
- javascript - 在 Mongoose 中填充嵌套在对象数组中的文档不起作用
- c++ - 我如何在 C++ 中访问私有成员 += 函数