我已经实现了规范模式来过滤我的一些JpaRepositories.在我实现了规范之后,我可以将它与JpaRepository一起使用,如下所示:
Page<Entity> page = entityJpaRepository.findAll(entitySpecification, pageable)
是否有用于支持ElasticsearchRepository中的规范的功能或计划功能?
我正在使用Java/Spring Boot API开发AngularJS应用程序.它使用Spring Data Elasticsearch提供对Elasticsearch的Search API的访问以进行搜索.这是一个例子:
Page<Address> page = addressSearchRepository.search(simpleQueryStringQuery(query), pageable);
Run Code Online (Sandbox Code Playgroud)
变量query
是用户的搜索字符串.pageable
是一个指定页码,页面大小和排序的对象.我可以使用它QueryBuilders
来构建其他Elasticsearch查询并将它们公开为不同的API端点.
另一种选择是QueryBuilders.wrapperQuery
直接从JavaScript 使用和发送Elasticsearch查询.下面是一个jsonQuery
包含完整Elasticsearch查询的字符串示例:
Page<Address> page = addressSearchRepository.search(wrapperQuery(jsonQuery), pageable);
Run Code Online (Sandbox Code Playgroud)
这将是一个安全端点,只有经过身份验证的用户才能访问.这似乎等同于直接暴露Elasticsearch索引的Search API.假设索引中的任何数据都可以安全地显示给用户,这是否存在安全风险?
到目前为止,在我的研究中,我发现使用查询可能会使Elasticsearch崩溃,但在新版本中它并不是一个大问题:https://www.elastic.co/blog/found-crash -elasticsearch#任意大尺寸参数
当页面大小非常大时,可能限制页面大小或使用扫描和滚动API会减轻这种情况.
我知道应该不惜一切代价避免使用脚本字段,但默认情况下它们是禁用的(从v1.4.3开始).