java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > ES多种查询方式

Elasticsearch(ES)多种查询方式案例

作者:sunnyday0426

Elasticsearch是一个分布式的RESTful搜索和分析引擎,可让您轻松地大规模存储,搜索和分析,这篇文章主要给大家介绍了关于Elasticsearch(ES)多种查询方式的相关资料,需要的朋友可以参考下

1. Elasticsearch的查询方式

Elasticsearch(ES)提供了多种查询方式,可以根据不同的需求和场景选择合适的查询类型。

2. 常用的ES查询方式

以上只是一些常见的查询方式,ES还提供了更多的查询类型和功能,如复杂查询、地理位置查询、正则表达式查询等,可根据实际需求选择合适的查询方式。

3. 查询案例

下面是一个包含各种查询案例的示例:

3.1 products的索引

product_name:产品名称,类型为text

category:产品类别,类型为keyword

price:产品价格,类型为float

description:产品描述,类型为text

tags:产品标签,类型为keyword

创建索引products:

PUT /products
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "product_name": {
        "type": "text"
      },
      "category": {
        "type": "keyword"
      },
      "price": {
        "type": "float"
      },
      "description": {
        "type": "text"
      },
      "tags": {
        "type": "keyword"
      }
    }
  }
}

创建了一个名为products的索引。 number_of_shards定义了主分片数为1。
number_of_replicas定义了副本数为1。 mappings定义了索引中的字段类型和属性。

3.2 Match Query(匹配查询)

POST /products/_search
{
  "query": {
    "match": {
      "product_name": "laptop"
    }
  }
}

使用match查询来进行全文匹配查询。 在product_name字段中匹配关键词"laptop"。
返回与"laptop"相关度最高的文档。

3.3 Term Query(精确查询)

POST /products/_search
{
  "query": {
    "term": {
      "category": "electronics"
    }
  }
}

使用term查询进行精确匹配查询。 在category字段中精确匹配"electronics"。
返回与"electronics"完全一致的文档。

3.4 Range Query(范围查询)

POST /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 500
      }
    }
  }
}

使用range查询进行范围查询。 在price字段中查询价格在100到500之间的文档。 返回价格在100到500之间的文档。

3.5 Bool Query(布尔查询)

POST /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "product_name": "laptop" } },
        { "term": { "category": "electronics" } }
      ],
      "must_not": [
        { "range": { "price": { "gte": 2000 } } }
      ],
      "should": [
        { "match": { "description": "lightweight" } },
        { "match": { "tags": "portable" } }
      ]
    }
  }
}

使用bool查询进行多条件查询逻辑。
must子句中同时满足product_name为"laptop"和category为"electronics"的文档。
must_not子句中排除价格大于等于2000的文档。
should子句中满足description包含"lightweight"或tags包含"portable"的文档。
返回符合以上条件的文档。

3.6 Match Phrase Query(短语匹配查询)

POST /products/_search
{
  "query": {
    "match_phrase": {
      "product_name": "red laptop"
    }
  }
}

使用match_phrase查询进行短语匹配查询。 在product_name字段中匹配短语"red laptop"。 返回包含短语"red
laptop"的文档。

3.7 Prefix Query(前缀查询)

POST /products/_search
{
  "query": {
    "prefix": {
      "product_name": "ca"
    }
  }
}

使用prefix查询进行前缀匹配查询。 在product_name字段中匹配以"ca"开头的文档。 返回以"ca"开头的产品名称的文档。

3.8 Wildcard Query(通配符查询)

POST /products/_search
{
  "query": {
    "wildcard": {
      "product_name": "l*t"
    }
  }
}

使用wildcard查询进行通配符模式匹配查询。 在product_name字段中匹配带有"l"和"t"之间任意字符的文档。
返回符合通配符模式的文档。

3.9 Fuzzy Query(模糊查询)

POST /products/_search
{
  "query": {
    "fuzzy": {
      "product_name": {
        "value": "laptop",
        "fuzziness": 2
      }
    }
  }
}

使用fuzzy查询进行模糊匹配查询。 在product_name字段中匹配与"laptop"相似的文档。
fuzziness参数设置了相似度为2。 返回与"laptop"相似的文档。

3.10 Nested Query(嵌套查询)

POST /products/_search
{
  "query": {
    "nested": {
      "path": "reviews",
      "query": {
        "match": {
          "reviews.comment": "good"
        }
      }
    }
  }
}

使用nested查询进行嵌套查询。 在reviews嵌套字段中根据reviews.comment字段的值查询"good"的文档。
返回包含满足嵌套查询条件的文档。

3.11 Aggregation Query(聚合查询)

POST /products/_search
{
  "size": 0,
  "aggregations": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    },
    "max_price": {
      "max": {
        "field": "price"
      }
    },
    "category_count": {
      "terms": {
        "field": "category"
      }
    }
  }
}

使用aggregations进行聚合查询。 avg聚合计算了price字段的平均值。 max聚合计算了price字段的最大值。
terms聚合按category字段进行分组统计。 返回计算和统计结果,包括平均价格、最高价格和每个分类的文档数量。

附:时间范围查询

简单示例

GET /_search
{
  "query": {
    "range": {
      "timestamp": {
        "gte": "now-1d/d", // 当前时间的上一天, 四舍五入到最近的一天
        "lte": "now/d" // 当前时间, 四舍五入到最近的一天
      }
    }
  }
}

总结 

到此这篇关于Elasticsearch(ES)多种查询方式的文章就介绍到这了,更多相关ES多种查询方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文