Trong khi các phương pháp mapping
và to_indexed_json
có liên quan, chúng phục vụ hai mục đích khác nhau, trên thực tế.
Mục đích của phương pháp mapping
là xác định mapping cho các thuộc tính tài liệu trong một chỉ mục. Bạn có thể muốn xác định thuộc tính nhất định là "not_analyzed", vì vậy nó không được chia thành mã thông báo hoặc đặt một trình phân tích cụ thể cho thuộc tính hoặc (như bạn đề cập) thời gian lập chỉ mục tăng hệ số. Bạn cũng có thể xác định multifield bất động sản, định dạng tùy chỉnh cho ngày loại vv
mapping này sau đó được sử dụng ví dụ. khi Lốp tự động creates an index for your model.
Mục đích của phương pháp to_indexed_json
là xác định một serialization JSON cho tài liệu của bạn/mô hình.
Các default to_indexed_json
method không sử dụng định nghĩa bản đồ của bạn, chỉ sử dụng các thuộc tính được định nghĩa trong bản đồ - trên cơ sở đó nếu bạn đủ quan tâm để xác định mapping, theo mặc định lốp chỉ số chỉ tính với bản đồ xác định.
Bây giờ, khi bạn muốn nắm vững cách thức mô hình của bạn trên thực tế được tuần tự hóa thành JSON cho elasticsearch, bạn chỉ cần xác định các phương thức to_indexed_json
của riêng mình (như README hướng dẫn).
này tùy chỉnh MyModel#to_indexed_method
thường không quan tâm đến mapping định nghĩa, và xây dựng các serialization JSON từ đầu (bằng cách tận dụng ActiveRecord của to_json
, sử dụng một người thợ xây JSON như jbuilder, hoặc chỉ xây dựng một đồng bằng cũ Hash và gọi Hash#to_json
).
Vì vậy, để trả lời phần cuối của câu hỏi của bạn, sử dụng cả hai mapping
và to_indexed_json
sẽ hoàn toàn không tạo ra bất kỳ xung đột, và trong thực tế cần thiết để sử dụng các tính năng tiên tiến trong elasticsearch.
Tóm lại:
- Bạn sử dụng phương pháp
mapping
để xác định việc lập bản đồ cho các mô hình của bạn cho công cụ tìm kiếm
- Bạn sử dụng một phương pháp tùy chỉnh
to_indexed_json
để xác định cách cụ tìm kiếm thấy tài liệu của bạn/mô hình .
nếu tôi muốn có 2 chỉ mục khác nhau cho một Mô hình đơn lẻ. Làm cách nào để xác định cả hai chỉ mục? – EmFeld
Bạn không thể có hai chỉ mục riêng biệt cho một kiểu máy hiện có trong Lốp xe. – karmi
Cảm ơn điều đó rất rõ ràng. Và do đó, kết quả của phương thức 'to_indexed_json' được cho là nằm trong phần tử' _source' của kết quả tìm kiếm? – aurels