Truy vấn tìm kiếm cơ bản trong Elasticsearch: Hướng dẫn chi tiết

Truy vấn dựa trên từ khóa (Match Query)

Truy vấn Match được sử dụng để tìm kiếm các tài liệu chứa từ khóa cụ thể. Nó sẽ trả về các tài liệu có chứa ít nhất một từ khóa tương ứng.

Ví dụ: Tìm các sản phẩm có tên chứa từ "laptop" trong Index "products".

GET /products/_search
{
  "query": {
    "match": {
      "name": "laptop"
    }
  }
}

 

Truy vấn phải chứa tất cả từ khóa (Match Phrase Query)

Truy vấn Match Phrase yêu cầu tất cả từ khóa trong truy vấn phải xuất hiện liên tiếp và đúng thứ tự trong văn bản tài liệu.

Ví dụ: Tìm các sản phẩm có mô tả chứa cụm từ "máy tính xách tay HP".

GET /products/_search
{
  "query": {
    "match_phrase": {
      "description": "máy tính xách tay HP"
    }
  }
}

 

Truy vấn phải chứa toàn bộ cụm từ (Match Phrase Prefix Query)

Truy vấn Match Phrase Prefix tương tự như Match Phrase, nhưng cho phép chứa một phần của từ khóa cuối cùng.

Ví dụ: Tìm các sản phẩm có mô tả chứa cụm từ bắt đầu bằng "máy tính xách tay".

GET /products/_search
{
  "query": {
    "match_phrase_prefix": {
      "description": "máy tính xách tay"
    }
  }
}

 

Truy vấn tìm kiếm theo điều kiện (Term Query)

Truy vấn Term sử dụng để tìm kiếm các tài liệu có trường có giá trị chính xác như được chỉ định.

Ví dụ: Tìm các sản phẩm có trường "category" có giá trị "laptop".

GET /products/_search
{
  "query": {
    "term": {
      "category": "laptop"
    }
  }
}

 

Truy vấn tìm kiếm theo phạm vi (Range Query)

Truy vấn Range giúp tìm kiếm các tài liệu có giá trị của trường nằm trong một khoảng xác định.

Ví dụ: Tìm các sản phẩm có giá trong khoảng từ 500 đến 1000.

GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 500,
        "lte": 1000
      }
    }
  }
}

 

Truy vấn tìm kiếm phân loại (Term Level Query)

Truy vấn Term Level cho phép tìm kiếm các tài liệu dựa trên một phạm vi cụ thể, như là các truy vấn Exact, Prefix, Range, Wildcard, và Fuzzy.

Ví dụ: Tìm các sản phẩm có tên bắt đầu bằng "laptop" và giá nằm trong khoảng từ 500 đến 1000.

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "name": "laptop"
          }
        },
        {
          "range": {
            "price": {
              "gte": 500,
              "lte": 1000
            }
          }
        }
      ]
    }
  }
}

 

Truy vấn tìm kiếm phân tích văn bản (Full-Text Query)

Truy vấn Full-Text cho phép tìm kiếm văn bản trong trường sử dụng các thuật toán phân tích văn bản để tìm các từ gần giống nhau hoặc từ đồng nghĩa.

Ví dụ: Tìm các sản phẩm có mô tả chứa từ "máy tính" hoặc "laptop".

GET /products/_search
{
  "query": {
    "match": {
      "description": "máy tính laptop"
    }
  }
}

 

Truy vấn tìm kiếm đa tiêu chí (Bool Query)

Truy vấn Bool cho phép bạn kết hợp nhiều truy vấn con lại với các điều kiện tìm kiếm đa dạng như phải chứa tất cả, phải chứa ít nhất một, hoặc không chứa, để đạt được kết quả tìm kiếm chính xác.

Ví dụ: Tìm các sản phẩm có trường "category" là "laptop" và có giá nằm trong khoảng từ 500 đến 1000.

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "category": "laptop"
          }
        },
        {
          "range": {
            "price": {
              "gte": 500,
              "lte": 1000
            }
          }
        }
      ]
    }
  }
}

 

Trên đây là các truy vấn tìm kiếm cơ bản trong Elasticsearch và ví dụ minh họa cho mỗi loại truy vấn. Khi sử dụng Elasticsearch, bạn có thể kết hợp các loại truy vấn này để tìm kiếm dữ liệu một cách linh hoạt và hiệu quả.