Java

发布于 更新于

AI总结: 本文介绍了Elasticsearch中常用的QueryBuilder类及其查询语法,包括match查询、multiMatch查询、term查询、terms查询、bool查询、nested查询、range查询、matchPhrase查询、exists查询、fuzzy查询、prefix查询和wildcard查询。每种查询方式都有其特定的用途和示例代码,适用于不同的搜索需求。需要注意的是,某些查询如prefix和wildcard查询可能会对性能产生较大影响,特别是在使用短前缀或通配符位于开头时。整体上,文本未提及的错误观点包括对某些查询性能影响的具体程度和使用场景的警示,建议在实际使用中进行性能评估。

Elasticsearch 常用的 QueryBuilder 类及其查询语法

常用的 QueryBuilder 类及其使用方法

  1. match 查询
    说明:用于全文本搜索,支持分词和模糊匹配。默认会对文本进行分词处理, 然后进行搜索.
    示例

    MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("字段名", "查询词");  
    

  2. multiMatch 查询
    说明: 允许你在多个字段上执行匹配查询, 适用于需要在不同字段上搜索相同文本的情况。
    示例

    MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("text to search", "fieldName1", "fieldName2");  
    

  3. term 查询
    说明:用于精确匹配某个字段的值, 单一关键词搜索,不进行分词
    示例

    TermQueryBuilder termQuery = QueryBuilders.termQuery("字段名", "精确值");  
    

  4. terms 查询
    说明:允许指定多个精确值进行匹配查询。不会对字段值进行分词,适用于字段值完全匹配其中一个查询值的情况。

    TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("字段名", "值1", "值2", "值3");  
    

  5. 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"));  
    

  6. nested 查询
    说明:用于搜索嵌套文档。nested_field是嵌套对象的路径,必须使用nested类型定义嵌套对象字段。
    示例

    NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery("nested_field",  
    QueryBuilders.matchQuery("nested_field.nested_doc.sub_field", "nested_value"));  
    

  7. range 查询
    说明:用于范围查询。可以设置范围的起始和结束值,适用于数值、日期等类型的字段。
    示例

    RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("字段名")  
    .gte("开始值")  
    .lte("结束值");  
    

  8. matchPhrase 查询
    说明:用于短语查询,匹配整个短语。搜索与指定短语匹配的文档,考虑短语的完整性和顺序。对于精确的短语搜索非常有用。
    示例

    MatchPhraseQueryBuilder matchPhraseQuery = QueryBuilders.matchPhraseQuery("字段名", "短语查询词");  
    

  9. exists 查询
    说明:用于检查字段是否存在。
    示例

    ExistsQueryBuilder existsQuery = QueryBuilders.existsQuery("字段名");  
    

  10. exists 查询的嵌套文档
    说明:用于检查嵌套字段是否存在。
    示例

    NestedQueryBuilder nestedExistsQuery = QueryBuilders.nestedQuery("nested_field",  
    QueryBuilders.existsQuery("nested_field.nested_doc.sub_field"));  
    

  11. fuzzy 查询
    说明:用于模糊查询,允许一定程度的错误。基于Levenshtein编辑距离进行匹配,可以设置模糊程度。
    示例

    FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("字段名", "模糊查询词");  
    

  12. prefix 查询
    说明:用于前缀匹配。查询字段值以指定前缀开头的文档, 对性能影响较大,特别是前缀较短时。
    示例

    PrefixQueryBuilder prefixQuery = QueryBuilders.prefixQuery("字段名", "前缀");  
    

  13. wildcard 查询
    说明:用于通配符匹配,支持 *? 通配符。可能会影响性能,尤其是通配符在前面时。
    示例

    WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("字段名", "查询词*");