我正在使用spring-data-elasticsearch,我有一个类如下所示,
@Document(indexName = "sample")
class Sample {
@Id
private String id;
private String name;
private Status status;
}
class Status {
private String id;
}上面是持久化到elasticsearch的。我有下面的方法在里面找到数据。
List<Sample> getAll(String statusId, String text, Pageable pageable);这是我用来获取数据的当前代码,
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.multiMatchQuery(text)
.field("name")
.type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX));
NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();我需要的是通过statusId查找结果,然后搜索包含在name字段中的文本。
我也尝试了下面的方法,但没有成功。我也尝试过criteria-api,但它只适用于没有空间的单词。如果有带空格的单词,就会抛出Cannot constructQuery '*\"text\"*'. Use expression or multiple clauses instead
.withFilter(QueryBuilders.termQuery("status.id", statusId))
那么,如何为上述场景构建查询呢?
根据P.J. Meisch的建议构建新的查询
QueryBuilder query1 = QueryBuilders.matchQuery("status.id", statusId).operator(Operator.AND);
QueryBuilder query2 = QueryBuilders.multiMatchQuery(text).field("name").type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX);
new NativeSearchQueryBuilder().withQuery(QueryBuilders.boolQuery().must(query1).must(query2));发布于 2021-08-31 04:32:40
顶级查询应该是一个bool查询,必须包含两个条目。
name的第一个,的第二个
https://stackoverflow.com/questions/68989964
复制相似问题