我是 ElasticSearch 和 Couchbase 的新手。我正在构建一个示例 Java 应用程序以了解有关 ElasticSearch 和 Couchbase 的更多信息。
阅读ElasticSearch Java API,过滤器更适合用于不需要按分数排序和缓存的情况。我还没有弄清楚如何使用 FilterBuilders 并且有以下问题:
- 可以
FilterBuilders
单独使用搜索吗? - 或者它们是否总是必须与 a 一起使用
Query
?(如果属实,有人可以举个例子吗?) - 浏览文档,如果我想根据字段值执行搜索并想使用 FilterBuilders,我该如何完成?(使用
AndFilterBuilder
orTermFilterBuilder
orInFilterBuilder
?我不清楚它们之间的区别。)
对于第三个问题,我实际上使用查询和过滤器进行了搜索,如下所示。当我尝试使用FilterBuilders
. 我不确定我做错了什么。
任何示例都会有所帮助。我在浏览文档时遇到了困难,我发现这些文档很少,甚至搜索导致各种不可靠的用户论坛。
private void processQuery() {
SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
QueryBuilder qb = QueryBuilders.fieldQuery("doc.address.state", "TX");
srb.setQuery(qb);
SearchResponse resp = srb.execute().actionGet();
System.out.println("response :" + resp);
}
private void searchWithFilters(){
SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
srb.setFilter(FilterBuilders.termFilter("doc.address.state", "tx"));
//AndFilterBuilder andFb = FilterBuilders.andFilter();
//andFb.add(FilterBuilders.termFilter("doc.address.state", "TX"));
//srb.setFilter(andFb);
SearchResponse resp = srb.execute().actionGet();
System.out.println("response :" + resp);
}
- -更新--
正如答案中所建议的,更改为小写“tx”有效。这个问题解决了。我还有以下问题:
- 在什么情况下,过滤器与查询一起使用?这将用于什么目的?
- 和之间
InFilter
的区别。任何插图都会有所帮助。TermFilter
MatchAllFilter