java – ElasticSearch – 使用FilterBuilders
我是ElasticSearch和Couchbase的新手.我正在构建一个示例
Java应用程序来了解有关ElasticSearch和Couchbase的更多信息.
阅读ElasticSearch Java API,过滤器更好地用于不需要排序和缓存的情况. 可以单独使用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); } –UPDATE– 如答案所示,改为小写“tx”的作品.这个问题解决了.我还有以下几个问题: >在什么情况下,与查询一起使用的过滤器?这将服务于什么目的? 解决方法
对,您应该使用过滤器来排除在执行查询时甚至不考虑文档.过滤器更快,因为它们不涉及任何评分,也可以缓存.
也就是说,很明显,您必须使用带有search api的过滤器,该过滤器执行查询并接受可选过滤器.如果您只有一个过滤器,您可以使用match_all查询与您的过滤器.过滤器可以是一个简单的过滤器,也可以是一个复合的过滤器,以便将多个过滤器组合在一起. 关于Java API,使用的名称是可用的过滤器的名称,没有大的区别.看看this search example例如.在你的代码中,我看不到你在SearchRequestBuilder对象上执行setFilter的位置.你似乎也不需要和过滤器,因为你使用一个单一的过滤器.此外,可能是您使用默认映射进行索引,因此术语“TX”较低.这就是为什么当您使用术语过滤器进行搜索时,找不到任何匹配.尝试搜索“tx”lowercased. 如果要在索引时保持“TX”术语,可以更改映射,如果该字段只应该是单个令牌,则可以将该字段设置为not_analyzed.否则,您可以更改过滤器,您可能需要查看一个被分析的查询,以便您的查询将以内容索引的方式进行分析. 有关查询和过滤器的更多信息,请查看query DSL documentation: > 不知道InFilterBuilder是什么意思,找不到任何具有此名称的过滤器. 查询通常包含用户通过文本搜索框输入的内容.过滤器是更多的方法来优化搜索,例如点击facet条目.这就是为什么你仍然有查询加上一个或多个过滤器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |