我正在写一个查询;在 Kibana 中很容易
GET populationstreamassignment/_search
{
"query": {
"match": {
"healthyChildrenIndicator": true
}
},
"_source": "memberId"
}
我想要做的是获取“健康儿童”的所有 memberId 的列表。但我想把它翻译成 java 语法。
import java.util.List;
import java.util.UUID;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
/**
Spring Data Elasticsearch repository for the {@link PopulationStreamAssignment} entity.
*/
public interface PopulationStreamAssignmentSearchRepository extends ElasticsearchRepository<PopulationStreamAssignment, Long> {
@Query("{\"match\": {\"?0\": \"?1\"}}")
List<UUID> getMemberIdsByPopulationStream(String popStream, Boolean criteria);
}
这个查询有几个问题。这是我有问题的地方..
目前有一个 pull request 正在处理,它将允许添加源包含和源排除到用
@Query
注释注释的存储库方法,因此这将在下一个版本中可用。
除此之外,还可以将源过滤器值设置为
Query
接口(StringQuery
、CriteriaQuery
、NativeSearchQuery
)的任何提供的实现。您需要创建一个存储库片段(请参阅https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#repositories.custom-implementations)以添加构建的函数如果您希望将其集成到存储库中,则使用这些查询之一。
您用来读取数据的实体需要具有与返回值匹配的属性,例如
@Document(indexName="populationstreamassignment")
public class Returned {
@Id
private String id;
@Field(type= FieldType.text)
private String memberId
// getter and setter
}
@Shruti - 请注意 CustomRepoImpl 将由 spring 自动搜索,因为包位于 spring boot 的搜索路径中。 Impl 的名称应该是 (interface-name)Impl
@Repository
public interface NormalRepo extends ElasticsearchRepository<User, String>, CustomRepo {
Optional<Instant> findByName(String name);
}
public interface CustomRepo {
Optional<Instant> findByName(String name);
}
public class CustomRepoImpl implements CustomRepo {
Optional<Instant> findByName(String name) {
// your implementation
}
}