Quay lại

Query và Filter Context trong Elasticsearch Chuyên mục Elasticsearch    2024-03-29    10 Lượt xem    8 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Query và Filter Context trong Elasticsearch

Trong Elasticsearch, QueryFilter Context là hai khái niệm quan trọng giúp bạn tìm kiếm và lọc dữ liệu một cách linh hoạt. Trong bài viết này, chúng ta sẽ tìm hiểu về sự khác biệt giữa Query và Filter Context cũng như cách sử dụng chúng trong Elasticsearch.

Query Context

Query Context được sử dụng để xác định các điều kiện tìm kiếm mà tài liệu cần phải khớp để được trả về trong kết quả. Trong Query Context, Elasticsearch tính toán điểm số cho mỗi tài liệu dựa trên mức độ khớp của tài liệu đó với các điều kiện tìm kiếm.

  • Query context được sử dụng để xác định các điều kiện tìm kiếm mà tài liệu cần phải khớp để được trả về trong kết quả.
  • Trong query context, Elasticsearch tính toán điểm số (score) cho mỗi tài liệu dựa trên mức độ khớp với các điều kiện tìm kiếm  bạn đã chỉ định trong truy vấn.
  • Các điều kiện trong query context ảnh hưởng đến điểm số của các tài liệu và sắp xếp chúng theo mức độ phù hợp.

Filter Context

Filter Context được sử dụng để áp dụng các điều kiện lọc cho tài liệu mà không ảnh hưởng đến điểm số của chúng. Trong Filter Context, Elasticsearch chỉ đơn giản là lọc các tài liệu dựa trên các điều kiện đã cho, mà không tính toán điểm số.

  • Filter context được sử dụng để áp dụng các điều kiện lọc cho tài liệu mà không ảnh hưởng đến điểm số của chúng.
  • Trong filter context, Elasticsearch chỉ đơn giản là lọc các tài liệu dựa trên các điều kiện đã cho, mà không tính toán điểm số.
  • Filter context thường được sử dụng để hạn chế tập hợp kết quả dựa trên các tiêu chí như giá trị của một trường, khoảng giá trị của một trường, hoặc tồn tại của một trường.

Ví dụ

Giả sử bạn có một index chứa thông tin về các sản phẩm, bao gồm "name", "price", và "category".

"Query Contex":

Tìm kiếm các sản phẩm có tên chứa từ "laptop" và giá lớn hơn 500 đô la.

Trong trường này, bạn sử dụng "match" query cho trường "name" và "range" query cho trường "price".

{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "laptop" }},
        { "range": { "price": { "gt": 500 }}}
      ]
    }
  }
}​

"Filter Context":

Ví dụ: Hiển thị các sản phẩm thuộc danh mục "Electronics".

Trong trường này, bạn sử dụng term filter cho trường category.

{
  "query": {
    "bool": {
      "filter": {
        "term": { "category": "Electronics" }
      }
    }
  }
}​

Kế hợp Query và Fillter

GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "name": "laptop" }},
        { "range": { "price": { "gt": 500 }}}
      ],
      "filter": [ 
        { "term": { "category": "Electronics" }},
      ]
    }
  }
}

Có thể bạn chưa biết

Trong Elasticsearch, một bool query là một loại truy vấn mà cho phép bạn kết hợp nhiều điều kiện tìm kiếm và/hoặc điều kiện lọc lại với nhau bằng các toán tử logic (AND, OR, NOT). Điều này cho phép bạn xây dựng các truy vấn phức tạp để tìm kiếm tài liệu dựa trên nhiều tiêu chí khác nhau.

Một bool query bao gồm hai phần chính: must và filter.

  1. Must Clauses: Đây là điều kiện tìm kiếm cần phải được thỏa mãn. Tài liệu phải khớp với tất cả các điều kiện trong phần này để được trả về trong kết quả. Điều này tương đương với toán tử logic AND.

  2. Filter Clauses: Đây là các điều kiện lọc. Các tài liệu không phải làm điều kiện này không bị loại trừ khỏi kết quả, nhưng chúng không ảnh hưởng đến điểm số của tài liệu. Điều này hữu ích khi bạn muốn áp dụng các ràng buộc như lọc theo giá trị của một trường hoặc khoảng giá trị của một trường.

Một số toán tử logic khác cũng có thể được sử dụng trong bool query:

  • Should Clauses: Đây là các điều kiện tìm kiếm tùy chọn. Nếu một tài liệu khớp với bất kỳ một điều kiện nào trong phần này, nó sẽ được xem xét là một kết quả tương đối.

  • Must Not Clauses: Đây là các điều kiện tìm kiếm mà tài liệu không được khớp. Bất kỳ tài liệu nào khớp với bất kỳ một điều kiện nào trong phần này đều sẽ bị loại trừ khỏi kết quả.

Bool query cho phép bạn xây dựng các truy vấn linh hoạt và mạnh mẽ, cho phép bạn chính xác định các tiêu chí tìm kiếm và lọc để trả về các tài liệu phù hợp nhất với nhu cầu của bạn.

Kết Luận

Query và Filter Context là hai khái niệm quan trọng trong Elasticsearch giúp bạn tìm kiếm và lọc dữ liệu một cách hiệu quả. Sử dụng chúng phù hợp sẽ giúp bạn tạo ra các truy vấn phức tạp và linh hoạt để đáp ứng nhu cầu tìm kiếm của bạn.

Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về Query và Filter Context trong Elasticsearch và cách sử dụng chúng để tối ưu hóa quá trình tìm kiếm dữ liệu của bạn.

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday