Elasticsearch Multi-Get

Elasticsearch Multi Get



Bài viết này sẽ thảo luận về cách sử dụng Elasticsearch multi-get API để tìm nạp nhiều tài liệu JSON dựa trên ID của chúng. Ngoài ra, Elasticsearch cho phép bạn sử dụng một truy vấn nhận duy nhất để truy xuất tài liệu từ các chỉ mục chỉ bằng cách sử dụng ID tài liệu.

Hãy khám phá.







Cú pháp yêu cầu

Sau đây là cú pháp cho API đa điểm Elasticsearch:



GET / _mget
GET / / _mget

API multi-get hỗ trợ nhiều chỉ mục cho phép bạn tìm nạp các tài liệu ngay cả khi chúng không nằm trong cùng một chỉ mục.



Yêu cầu hỗ trợ các tham số đường dẫn sau:





  1. - Tên của chỉ mục mà từ đó truy xuất các tài liệu như được chỉ định bởi ID của chúng.

Bạn cũng có thể chỉ định các tham số truy vấn khác như được hiển thị:

  1. Sự ưa thích - Xác định nút hoặc phân đoạn ưa thích.
  2. Thời gian thực - Nếu được đặt thành true, hoạt động sẽ được thực hiện trong thời gian thực.
  3. Làm mới - Buộc thực hiện thao tác làm mới các phân đoạn đích trước khi tìm nạp các tài liệu được chỉ định.
  4. Lộ trình - Một giá trị được sử dụng để định tuyến các hoạt động đến một phân đoạn cụ thể.
  5. Store_fields - Truy xuất các trường tài liệu được lưu trữ trong một chỉ mục hơn là tài liệu.
  6. _nguồn - Một giá trị Boolean xác định xem yêu cầu có trả về trường _source hay không.

Truy vấn yêu cầu phần nội dung, bao gồm các giá trị sau:



  1. Docs - Chỉ định các tài liệu mà bạn muốn tìm nạp. Ngoài ra, phần này hỗ trợ các thuộc tính sau:
    • _Tôi - ID duy nhất của tài liệu đích.
    • _mục lục - Chỉ mục chứa tài liệu đích.
    • Lộ trình - Khóa cho phân đoạn chính của tài liệu.
    • _nguồn - Nếu đúng, nó bao gồm tất cả các trường nguồn; nếu không, nó loại trừ chúng.
    • _stored_fields - Các trường được lưu trữ mà bạn muốn đưa vào.
  2. Id - Id của tài liệu mà bạn muốn tìm nạp.

Ví dụ 1: Tìm nạp nhiều tài liệu từ cùng một chỉ mục

Ví dụ sau đây cho thấy cách sử dụng API đa điểm Elasticsearch để truy xuất các tài liệu có ID cụ thể từ chỉ mục Netflix:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: báo cáo' -H 'Nội dung-Loại: ứng dụng / json' -d '
{
'tài liệu': [
{
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_id': 'W3wnVoMBck2AEzXPytlJ'
}
]
} '

Yêu cầu đã cho sẽ tìm nạp các tài liệu có ID được chỉ định từ chỉ mục Netflix. Kết quả đầu ra như được hiển thị:

{
'tài liệu': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_phiên bản 1,
'_seq_no': 0,
'_primary_term': 1,
'found': true,
'_nguồn': {
'thời lượng': '90 phút',
'list_in': 'Phim tài liệu',
'Quốc gia: Hoa Kỳ',
'date_added': 'Ngày 25 tháng 9 năm 2021',
'show_id': 's1',
'đạo diễn': 'Kirsten Johnson',
'release_year': 2020,
'xếp hạng': 'PG-13',
'description': 'Khi cha cô ấy gần cuối đời, nhà làm phim Kirsten Johnson chia sẻ cái chết của ông theo những cách hài hước và sáng tạo để giúp cả hai đối mặt với điều không thể tránh khỏi.',
'type': 'Phim',
'title': 'Dick Johnson đã chết'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2AEzXPytlJ',
'_phiên bản 1,
'_seq_no': 12,
'_primary_term': 1,
'found': true,
'_nguồn': {
'country': 'Đức, Cộng hòa Séc',
'show_id': 's13',
'đạo diễn': 'Christian Schwochow',
'release_year': 2021,
'xếp hạng': 'TV-MA',
'description': 'Sau khi hầu hết gia đình cô ấy bị sát hại trong một vụ đánh bom khủng bố, một phụ nữ trẻ vô tình bị dụ tham gia vào chính nhóm đã giết họ.',
'type': 'Phim',
'title': 'Tôi là Karl',
'thời lượng': '127 phút',
'list_in': 'Phim truyền hình, Phim quốc tế',
'dàn diễn viên': 'Luna Wedler, Jannis Niewöhner, Milan Peschel, Edin Hasanović, Anna Fialová, Marlon Boess, Victor Boccard, Fleur Geffrier, Aziz Dyab, Mélanie Fouché, Elizaveta Maximová',
'date_added': 'Ngày 23 tháng 9 năm 2021'
}
}
]

}

Chúng tôi cũng có thể đơn giản hóa yêu cầu bằng cách đặt các ID tài liệu trong một mảng đơn giản như được hiển thị trong hình sau:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: báo cáo' -H 'Nội dung-Loại: ứng dụng / json' -d '
{
'id': ['T3wnVoMBck2AEzXPytlJ', 'W3wnVoMBck2AEzXPytlJ']
} '

Yêu cầu trước đó sẽ thực hiện một hành động tương tự.

Ví dụ 2: Tìm nạp tài liệu từ nhiều chỉ số

Trong ví dụ sau, yêu cầu tìm nạp nhiều tài liệu từ các chỉ số khác nhau như được hiển thị:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: report' -H 'Content-Type: application / json' -d '
{
'tài liệu': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_index': 'disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
} '

Kết quả đầu ra như được hiển thị:

Ví dụ 3: Loại trừ các trường cụ thể

Chúng tôi có thể loại trừ các trường cụ thể khỏi một yêu cầu nhất định bằng cách sử dụng các tham số source_include và source_exclude.

Một ví dụ như được hiển thị:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: report' -H 'Content-Type: application / json' -d '
{
'tài liệu': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_source': false
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_nguồn': {
'bao gồm': ['list_in', 'release_year', 'title'],
'loại trừ': ['description', 'type', 'date_added']
}
}
]

} '

Yêu cầu đã cho sử dụng nguồn bao gồm và loại trừ để chỉ định trường nào bạn muốn truy xuất trong một tài liệu nhất định.

Kết quả đầu ra như được hiển thị:

Sự kết luận

Trong bài đăng này, chúng tôi đã thảo luận về các nguyên tắc cơ bản khi làm việc với Elasticsearch multi-get API, cho phép bạn tìm nạp nhiều tài liệu từ nhiều nguồn khác nhau dựa trên ID của chúng. Vui lòng khám phá các tài liệu khác để biết thêm thông tin.

Chúc bạn viết mã vui vẻ!