Elasticsearch Java-Play Framework - 在query BoolQueryBuilder中写一个query
Elasticsearch Java-Play Framework - in query BoolQueryBuilder to write a query
这是我的 ES 文档结构
admin_faq
- faq_id
- title
- is_active
案例 1 过滤器
用逗号分隔 FAQ id's 2,3,4.
拆分 ID 使用
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
在情况 1 中,此查询对我来说工作正常,并且只显示常见问题 ID 为 2,3,4
的常见问题
案例二
当我有另一个像 is_active 这样的过滤器时,它的 return 是 is_active=Y 的所有数据,并且还与逗号分隔的 id 的常见问题解答有关
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
queryBuilderPost.must(QueryBuilders.termsQuery("is_active", isActive));
注意:我希望仅从具有活动记录的逗号分隔 ID 中获取数据。您可以说它的工作方式类似于 MySQL 中的 OR
条件。我们需要将其更改为 AND 条件,我正在尝试但不适合我。
您可以将 must
替换为 filter
。
或者,您只需要另一层 bool
查询。
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
QueryBuilder bool = QueryBuilders.boolQuery();
bool.must(queryBuilderPost);
bool.must(QueryBuilders.termsQuery("is_active", isActive));
然后使用 bool
作为您的查询。
这是我的 ES 文档结构
admin_faq
- faq_id
- title
- is_active
案例 1 过滤器
用逗号分隔 FAQ id's 2,3,4.
拆分 ID 使用
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
在情况 1 中,此查询对我来说工作正常,并且只显示常见问题 ID 为 2,3,4
案例二 当我有另一个像 is_active 这样的过滤器时,它的 return 是 is_active=Y 的所有数据,并且还与逗号分隔的 id 的常见问题解答有关
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
queryBuilderPost.must(QueryBuilders.termsQuery("is_active", isActive));
注意:我希望仅从具有活动记录的逗号分隔 ID 中获取数据。您可以说它的工作方式类似于 MySQL 中的 OR
条件。我们需要将其更改为 AND 条件,我正在尝试但不适合我。
您可以将 must
替换为 filter
。
或者,您只需要另一层 bool
查询。
String[] array = assignedCategories.split(",");
for (String value : array) {
queryBuilderPost.should(QueryBuilders.termsQuery("faq_id", value));
}
QueryBuilder bool = QueryBuilders.boolQuery();
bool.must(queryBuilderPost);
bool.must(QueryBuilders.termsQuery("is_active", isActive));
然后使用 bool
作为您的查询。