“where .. in”模拟elasticsearch与Java API
我是ElasticSearch的新手。 我在我的User类中有一个字符串字段,代表UserStatus,我需要搜索处于特定状态的所有用户。 在关系数据库中,它完全是“where .. in”。“where .. in”模拟elasticsearch与Java API
我看到的例子,使用termsQuery
在不同的组合,但我没有设法使他们工作(查询返回什么都没有)。
所以,问题是:有没有链接,显示整个例子或某人面临这样的问题? 任何帮助都很高兴!
//实体本身
@AllArgsConstructor @NoArgsConstructor
@Data
@Builder
@Document(indexName = "users", type = "user")
public class User {
@Id
private String id;
private String userStatus;
private String firstName;
private String lastName;
private Date dateCreated;
}
//一个弹簧服务方法
@Override public List<User> findByParams(UserSearchRequest userSearchRequest) {
TermsQueryBuilder termsQueryBuilder = QueryBuilders
.termsQuery("userStatus", userSearchRequest.getUserStatuses());
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQuery().must(termsQueryBuilder))
.withPageable(new PageRequest(0, 100))
.build();
return Lists.newArrayList(userRepository.search(searchQuery));
}
// REST请求对象
@AllArgsConstructor @NoArgsConstructor
@Data
public class UserSearchRequest {
private List<String> userStatuses;
}
回答:
检查Elasticsearch的文档"Finding Multiple Exact Values"
基本上,您需要将自己的术语搜索到一个常数分数查询中。
从Elasticsearch DOC(保留给后人)
GET /my_store/products/_search {
"query" : {
"constant_score" : {
"filter" : {
"terms" : {
"price" : [20, 30]
}
}
}
}
}
这个例子说,搜索的有价产品20或30
你需要的是搜索所有具有用户userStatus
您作为List
传递的任一值。
在你需要改变你的NativeSearchQueryBuilder
在这样的实施方面:
SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(constantScoreQuery(termsQueryBuilder))
.withPageable(new PageRequest(0, 100))
.build();
以上是 “where .. in”模拟elasticsearch与Java API 的全部内容, 来源链接: utcz.com/qa/259930.html