“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

回到顶部