首页 > 代码库 > Elasticsearch的javaAPI之facet,count,delete by query
Elasticsearch的javaAPI之facet,count,delete by query
Elasticsearch的javaAPI之count
count API允许轻松地执行一个查询,获得匹配的数量,可以跨越一个或多个index ,一个或多个type。
import static org.elasticsearch.index.query.xcontent.FilterBuilders.*; import static org.elasticsearch.index.query.xcontent.QueryBuilders.*; CountResponse response = client.prepareCount("test") .setQuery(termQuery("_type", "type1")) .execute() .actionGet();
有关计算操作的更多信息,请查看Rest count docs。
线程操作
The search API允许你设置线程来执行操作,这样实际姜执行API上执行的是相同的节点上(API上执行一个分配在同一服务器的shard上)。
这里有三种threading modes, The NO_THREADS
模式意味着查询操作将在calling thread上执行。SINGLE_THREAD
模式意味着将对local shards执行搜索操作,是在single different thread。THREAD_PER_SHARD
意味着搜索操作将在不同的线程上执行,对于每一个local shard。
默认的模式是 SINGLE_THREAD
。
Elasticsearch的javaAPI之delete by query
Delete by query API允许基于查询的基础上删除documents,从一个或多个基于index和一个或多个type。 在这里 是一个例子:
import static org.elasticsearch.index.query.FilterBuilders.*; import static org.elasticsearch.index.query.QueryBuilders.*; DeleteByQueryResponse response = client.prepareDeleteByQuery("test") .setQuery(termQuery("_type", "type1")) .execute() .actionGet();
elasticsearch之javaAPI之facets
对于facets,Elasticsearch提供了完善的Java API,可以看Facets guide。
使用为facets builders建立的工厂(FacetBuilders)
来构建,添加你想计算的某方面在查询的时候,并将它添加到你的搜索请求:
SearchResponse sr = node.client().prepareSearch() .setQuery( /* your query */ ) .addFacet( /* add a facet */ ) .execute().actionGet();
注意,您可以添加多个facets。 可以看Search java APP获取详细信息。
构建facets的请求,使用 FacetBuilders
helpers,仅仅是导入它们:
import org.elasticsearch.search.facet.FacetBuilders.*;
facets
terms facet
下面是如何使用term facet(Java API)。
准备facet request
这里是关于如何创建一个facet request:
FacetBuilders.termsFacet("f") .field("brand") .size(10);
使用facet response
导入facet 类
import org.elasticsearch.search.facet.terms.*;
// sr is here your SearchResponse object TermsFacet f = (TermsFacet) sr.getFacets().facetsAsMap().get("f"); f.getTotalCount(); // Total terms doc count f.getOtherCount(); // Not shown terms doc count f.getMissingCount(); // Without term doc count // For each entry for (TermsFacet.Entry entry : f) { entry.getTerm(); // Term entry.getCount(); // Doc count }
Range facet
下面是如何使用Range facet与Java API。
准备facet request
这里是关于如何创建一个例子(facet request):
FacetBuilders.rangeFacet("f") .field("price") // Field to compute on .addUnboundedFrom(3) // from -infinity to 3 (excluded) .addRange(3, 6) // from 3 to 6 (excluded) .addUnboundedTo(6); // from 6 to +infinity
Use facet response
Import facet相关类:
import org.elasticsearch.search.facet.range.*;
// sr is here your SearchResponse object RangeFacet f = (RangeFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (RangeFacet.Entry entry : f) { entry.getFrom(); // Range from requested entry.getTo(); // Range to requested entry.getCount(); // Doc count entry.getMin(); // Min value entry.getMax(); // Max value entry.getMean(); // Mean entry.getTotal(); // Sum of values }
直方图facet
下面是如何使用 柱状图facet(Java API)。
准备facet request
这里是关于如何创建一个facet request:
HistogramFacetBuilder facet = FacetBuilders.histogramFacet("f") .field("price") .interval(1);
使用facet response
导入facet相关类:
import org.elasticsearch.search.facet.histogram.*;
// sr is here your SearchResponse object HistogramFacet f = (HistogramFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (HistogramFacet.Entry entry : f) { entry.getKey(); // Key (X-Axis) entry.getCount(); // Doc count (Y-Axis) }
日期直方图facet
下面是如何使用日期直方图facet(Java API)。
准备facet request
这里是关于如何创建一个例子facet request:
FacetBuilders.dateHistogramFacet("f") .field("date") // Your date field .interval("year"); // You can also use "quarter", "month", "week", "day", // "hour" and "minute" or notation like "1.5h" or "2w"
使用facet response
导入facet相关类:
import org.elasticsearch.search.facet.datehistogram.*;
// sr is here your SearchResponse object DateHistogramFacet f = (DateHistogramFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (DateHistogramFacet.Entry entry : f) { entry.getTime(); // Date in ms since epoch (X-Axis) entry.getCount(); // Doc count (Y-Axis) }
过滤器(not facet filter)
下面是如何使用 facet filter(Java API)。
如果你正在寻找如何应用一个过滤器用于facet,看Java API中的facet filter。
准备facet response
这里是关于如何创建一个例子facet request:
FacetBuilders.filterFacet("f", FilterBuilders.termFilter("brand", "heineken")); // Your Filter here
看到filters来学习如何使用构建过滤器。
使用facet response
导入相关类:
import org.elasticsearch.search.facet.filter.*;
// sr is here your SearchResponse object FilterFacet f = (FilterFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount(); // Number of docs that matched
Query facet
下面是如何使用query facet(Java API)。
准备facet request
这里是关于如何创建一个例子facet request:
FacetBuilders.queryFacet("f", QueryBuilders.matchQuery("brand", "heineken"));
导入相关类类:
import org.elasticsearch.search.facet.query.*;
// sr is here your SearchResponse object QueryFacet f = (QueryFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount(); // Number of docs that matched
Statistical
下面是如何使用的 统计facet(Java API)。
准备facet request
这里是关于如何创建一个例子:
FacetBuilders.statisticalFacet("f") .field("price");
使用facet response
import org.elasticsearch.search.facet.statistical.*;
// sr is here your SearchResponse object StatisticalFacet f = (StatisticalFacet) sr.getFacets().facetsAsMap().get("f"); f.getCount(); // Doc count f.getMin(); // Min value f.getMax(); // Max value f.getMean(); // Mean f.getTotal(); // Sum of values f.getStdDeviation(); // Standard Deviation f.getSumOfSquares(); // Sum of Squares f.getVariance(); // Variance
Terms stats facet
下面是如何使用的 Terms stats facet(Java API)。
这里是关于如何创建一个例子:
FacetBuilders.termsStatsFacet("f") .keyField("brand") .valueField("price");
使用facet response
导入相关类
import org.elasticsearch.search.facet.termsstats.*;
// sr is here your SearchResponse object TermsStatsFacet f = (TermsStatsFacet) sr.getFacets().facetsAsMap().get("f"); f.getTotalCount(); // Total terms doc count f.getOtherCount(); // Not shown terms doc count f.getMissingCount(); // Without term doc count // For each entry for (TermsStatsFacet.Entry entry : f) { entry.getTerm(); // Term entry.getCount(); // Doc count entry.getMin(); // Min value entry.getMax(); // Max value entry.getMean(); // Mean entry.getTotal(); // Sum of values }
Geo distance facet
下面是如何使用距离facet(Java API)。
这里是关于如何创建一个例子:
FacetBuilders.geoDistanceFacet("f") .field("pin.location") // Field containing coordinates we want to compare with .point(40, -70) // Point from where we start (0) .addUnboundedFrom(10) // 0 to 10 km (excluded) .addRange(10, 20) // 10 to 20 km (excluded) .addRange(20, 100) // 20 to 100 km (excluded) .addUnboundedTo(100) // from 100 km to infinity (and beyond ;-) ) .unit(DistanceUnit.KILOMETERS); // All distances are in kilometers. Can be MILES
使用facet response
import org.elasticsearch.search.facet.geodistance.*;
// sr is here your SearchResponse object GeoDistanceFacet f = (GeoDistanceFacet) sr.getFacets().facetsAsMap().get("f"); // For each entry for (GeoDistanceFacet.Entry entry : f) { entry.getFrom(); // Distance from requested entry.getTo(); // Distance to requested entry.getCount(); // Doc count entry.getMin(); // Min value entry.getMax(); // Max value entry.getTotal(); // Sum of values entry.getMean(); // Mean }
Facet filter(not filter facet)
默认情况下,facet应用与查询结果集无论过滤器是否存在。
如果你需要计算facet在相同的过滤器或者其他过滤器,您可以添加facet到任何的过滤器,用 AbstractFacetBuilder #facetFilter(FilterBuilder)
方法:
FacetBuilders .termsFacet("f").field("brand") // Your facet .facetFilter( // Your filter here FilterBuilders.termFilter("colour", "pale") );
例如,您可以重用相同的过滤器创建你的查询:
// A common filter FilterBuilder filter = FilterBuilders.termFilter("colour", "pale"); TermsFacetBuilder facet = FacetBuilders.termsFacet("f") .field("brand") .facetFilter(filter); // We apply it to the facet SearchResponse sr = node.client().prepareSearch() .setQuery(QueryBuilders.matchAllQuery()) .setFilter(filter) // We apply it to the query .addFacet(facet) .execute().actionGet();
Scope
默认情况下,facet在查询结果集中计算。 但是你也可以计算facet的在整个index,无论查询是什么, 使用global参数:
TermsFacetBuilder facet = FacetBuilders.termsFacet("f") .field("brand") .global(true);
原文:
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/java-facets.html#_use_facet_response_2
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/delete-by-query.html
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/count.html
翻译欠佳,希望不会对大家造成误导
Elasticsearch的javaAPI之facet,count,delete by query