Elasticsearch的javaAPI之Query DSL-filters
和REST query dsl一樣,elasticsearch提供了一個完整的Java query dsl。?工廠過濾器建造者是
FilterBuilders
?一旦準備好您的查詢,就可以使用query api。
如何構建查詢?
使用
FilterBuilders,
導入它們在你的類:
import org.elasticsearch.index.query.FilterBuilders.*;
請注意,在
FilterBuilder
對象上可以輕松地打印(又名調試)?查詢生成的JSON,用?
toString()
方法
。?
下面選取了幾個常用的filer:
andfilter
FilterBuilders.andFilter(
? ? FilterBuilders.rangeFilter("postDate").from("2010-03-01").to("2010-04-01"),
? ? FilterBuilders.prefixFilter("name.second", "ba")
? ? );
注意,您可以緩存結果,用
AndFilterBuilder#cache(boolean)
?method方法。
?
bool filter
FilterBuilders.boolFilter()
? ? .must(FilterBuilders.termFilter("tag", "wow"))
? ? .mustNot(FilterBuilders.rangeFilter("age").from("10").to("20"))
? ? .should(FilterBuilders.termFilter("tag", "sometag"))
? ? .should(FilterBuilders.termFilter("tag", "sometagtag"));
用?
BoolFilterBuilder#cache(boolean)
?method緩存結果
exists filter
FilterBuilders.existsFilter("user");
matchall filter
FilterBuilders.matchAllFilter();
notfilter
FilterBuilders.notFilter(
? ? FilterBuilders.rangeFilter("price").from("1").to("2"));
or filter
FilterBuilders.orFilter(
? ? ? ? FilterBuilders.termFilter("name.second", "banon"),
? ? ? ? FilterBuilders.termFilter("name.nick", "kimchy")
? ? );
用
OrFilterBuilder#cache(boolean)
?method緩存結果
query filter
FilterBuilders.queryFilter(
? ? ? ? QueryBuilders.queryString("this AND that OR thus")
? ? );
用
QueryFilterBuilder#cache(boolean)
?method緩存結果
range filter
FilterBuilders.rangeFilter("age")
? ? .from("10")
? ? .to("20")
? ? .includeLower(true)
? ? .includeUpper(false);
// A simplified form using gte, gt, lt or lte
FilterBuilders.rangeFilter("age")
? ? .gte("10")
? ? .lt("20");
用
RangeFilterBuilder#cache(boolean)
method 緩存結果
t
term filter
FilterBuilders.termFilter("user", "kimchy");
你可以使用
TermFilterBuilder#cache(boolean)
?method來不適用緩存.
t
terms filter
FilterBuilders.termsFilter("user", "kimchy", "elasticsearch")
? ? .execution("plain"); ? ? // Optional, can be also "bool", "and" or "or"
? ? ? ? ? ? ? ? ? ? ? ? ? ? // or "bool_nocache", "and_nocache" or "or_nocache"
你可以不使用緩存,用
TermsFilterBuilder#cache(boolean)
method
cache
默認情況下,一些過濾器緩存,一些不緩存緩存。 你可以有一個好的控制使用
cache(boolean)
方法時存在。 例如:
FilterBuilder
filter
=
FilterBuilders
.
andFilter
(
? ? ? ??
FilterBuilders.rangeFilter("postDate").from("2010-03-01").to("2010-04-01"),
? ? ? ? FilterBuilders.prefixFilter("name.second", "ba")
? ? ? ? )
? ? .cache(true);
?