方法可以用来构建一个term查询,其基本用法如下:
QueryBuilder queryBuilder = ("field", "value");
其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的值。
如果要查询多个条件,可以使用BoolQueryBuilder
组合多个TermQueryBuilder
,如下所示:
BoolQueryBuilder boolQueryBuilder = ()
.must(("field1", "value1"))
.must(("field2", "value2"));
上述代码将构建一个bool查询,其中包含两个term查询,分别查询field1
为value1
和field2
为value2
的文档数据。在bool查询中,使用must
表示查询条件必须同时满足,还可以使用should
表示任意一个条件满足即可,也可以使用mustNot
表示条件必须不满足。
range
查询可以用来查询一定范围内的值。其基本用法如下:
QueryBuilder queryBuilder = ("field").from("value1").to("value2");
其中,第一个参数表示要查询的字段名称,from
表示起始值,to
表示结束值。这里的value1
和value2
可以是任意值,包括数值、日期、字符串等。如果只想查询大于等于某个值或小于等于某个值,可以使用gte
和lte
方法,如下所示:
QueryBuilder queryBuilder = ("field").gte("value1").lte("value2");
这里的gte
表示大于等于value1
,lte
表示小于等于value2
。
如果要查询在某个值范围内的文档,可以使用includeLower
和includeUpper
方法,如下所示:
QueryBuilder queryBuilder = ("field").from("value1").to("value2").includeLower(true).includeUpper(false);
这里的includeLower(true)
表示包含下界(即大于等于value1
),includeUpper(false)
表示不包含上界(即小于value2
)。
match
查询用于对某个字段进行文本匹配查询。它能够进行分词,并将查询字符串和分词后的文本进行比较,如果匹配则返回相应的文档。
下面是一个简单的match
查询的例子:
QueryBuilder queryBuilder = ("field", "query_string");
其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的字符串。默认情况下,match
查询使用的是OR逻辑,即如果查询字符串中的任何一个词项匹配文档中的一个或多个词项,则该文档就会被匹配成功。如果希望使用AND逻辑,则可以使用operator
方法,如下所示:
QueryBuilder queryBuilder = ("field", "query_string").operator();
在上面的例子中,使用了来指定匹配条件为AND逻辑,即只有查询字符串中的所有词项全部匹配文档中的词项时,才会将该文档匹配成功。
match
查询还支持模糊匹配功能,可以使用fuzziness
方法来设置相似度阈值,如下所示:
QueryBuilder queryBuilder = ("field", "query_string").fuzziness();
这里的表示使用自动计算的相似度阈值。
prefix
查询用于查询某个字段的前缀匹配。例如,如果要查询所有以某个词语开头的文档,可以使用prefix
查询。
下面是一个简单的prefix
查询的例子:
QueryBuilder queryBuilder = ("field", "prefix_string");
其中,第一个参数表示要查询的字段名称,第二个参数表示要查询的前缀字符串。
prefix
查询支持多种参数设置,例如可以使用boost
方法来设置查询权重,使用rewrite
方法来设置查询重写规则等。另外,需要注意的是,由于prefix
查询没有进行分词处理,因此查询字符串应该是一个完整的单词或短语,而不能是一个词项的一部分。
SearchHits<Product> shopping = (new NativeSearchQueryBuilder().withQuery(构造器名称).build(), , ("shopping")); List<Product> collect = ().map(SearchHit::getContent).collect(());
高亮查询
// 设置查询条件matchQuery使用默认分词器 QueryBuilder queryBuilder = ("title", title); // 设置高亮显示 HighlightBuilder highlightBuilder = new HighlightBuilder(); ("title"); ("<em>"); // 高亮标签的前缀 ("</em>"); // 高亮标签的后缀 // 执行搜索 SearchHits<Product> searchHits = ( new NativeSearchQueryBuilder() .withQuery(queryBuilder) .withHighlightBuilder(highlightBuilder) .build(), , ("shopping") ); // 处理结果 List<Product> products = new ArrayList<>(); for (SearchHit<Product> searchHit : searchHits) { Product product = (); // 获取高亮字段 Map<String, List<String>> highlightFields = (); if (("title")) { List<String> titleHighlights = ("title"); if (!()) { String titleHighlight = (0); (titleHighlight); } } (product); }