2012-07-26 20 views
20

Trong khi đọc Tire doc, tôi đã có ấn tượng rằng bạn nên sử dụng một trong hai mapping hoặc to_indexed_json phương pháp, vì (sự hiểu biết của tôi là ..) các mapping được sử dụng để nuôi to_indexed_json.ElasticSearch & lốp: Sử dụng bản đồ và to_indexed_json

Vấn đề là, tôi đã tìm thấy một số hướng dẫn mà cả hai đều được sử dụng. TẠI SAO? Về cơ bản, ứng dụng của tôi hoạt động ngay bây giờ với to_indexed_json nhưng tôi không thể tìm ra cách để đặt giá trị tăng của một số thuộc tính (vì vậy lý do tôi bắt đầu xem bản đồ) và tôi đã tự hỏi nếu sử dụng cả hai tạo ra một số xung đột.

Trả lời

49

Trong khi các phương pháp mappingto_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 mappingto_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:

  1. 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
  2. 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 .
+1

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

+0

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

+0

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

Các vấn đề liên quan