Elasticsearch 常用的 QueryBuilder 类及其查询语法
常用的 QueryBuilder 类及其使用方法
-
match查询
说明:用于全文本搜索,支持分词和模糊匹配。默认会对文本进行分词处理, 然后进行搜索.
示例:
MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("字段名", "查询词"); -
multiMatch查询
说明: 允许你在多个字段上执行匹配查询, 适用于需要在不同字段上搜索相同文本的情况。
示例:
MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("text to search", "fieldName1", "fieldName2"); -
term查询
说明:用于精确匹配某个字段的值, 单一关键词搜索,不进行分词
示例:
TermQueryBuilder termQuery = QueryBuilders.termQuery("字段名", "精确值"); -
terms查询
说明:允许指定多个精确值进行匹配查询。不会对字段值进行分词,适用于字段值完全匹配其中一个查询值的情况。
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("字段名", "值1", "值2", "值3"); -
bool查询
说明:用于组合多个查询条件,支持must(必须匹配)、should(至少匹配一个)、must_not(不能匹配)和filter(过滤)。
示例:
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("字段名1", "查询词1")) .should(QueryBuilders.matchQuery("字段名2", "查询词2")) .mustNot(QueryBuilders.matchQuery("字段名3", "查询词3")); -
nested查询
说明:用于搜索嵌套文档。nested_field是嵌套对象的路径,必须使用nested类型定义嵌套对象字段。
示例:
NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery("nested_field", QueryBuilders.matchQuery("nested_field.nested_doc.sub_field", "nested_value")); -
range查询
说明:用于范围查询。可以设置范围的起始和结束值,适用于数值、日期等类型的字段。
示例:
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("字段名") .gte("开始值") .lte("结束值"); -
matchPhrase查询
说明:用于短语查询,匹配整个短语。搜索与指定短语匹配的文档,考虑短语的完整性和顺序。对于精确的短语搜索非常有用。
示例:
MatchPhraseQueryBuilder matchPhraseQuery = QueryBuilders.matchPhraseQuery("字段名", "短语查询词"); -
exists查询
说明:用于检查字段是否存在。
示例:
ExistsQueryBuilder existsQuery = QueryBuilders.existsQuery("字段名"); -
exists查询的嵌套文档
说明:用于检查嵌套字段是否存在。
示例:
NestedQueryBuilder nestedExistsQuery = QueryBuilders.nestedQuery("nested_field", QueryBuilders.existsQuery("nested_field.nested_doc.sub_field")); -
fuzzy查询
说明:用于模糊查询,允许一定程度的错误。基于Levenshtein编辑距离进行匹配,可以设置模糊程度。
示例:
FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("字段名", "模糊查询词"); -
prefix查询
说明:用于前缀匹配。查询字段值以指定前缀开头的文档, 对性能影响较大,特别是前缀较短时。
示例:
PrefixQueryBuilder prefixQuery = QueryBuilders.prefixQuery("字段名", "前缀"); -
wildcard查询
说明:用于通配符匹配,支持*和?通配符。可能会影响性能,尤其是通配符在前面时。
示例:
WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("字段名", "查询词*");