Cách lập chỉ mục hoạt động trong magento


30
  1. Cách lập chỉ mục hoạt động trong Magento
  2. Chính xác thì nó làm gì?
  3. Tại sao nó được yêu cầu?

Liên kết này: stackoverflow.com/questions/4945307/ sẽ giúp bạn
TBI Infotech

Dưới đây là cách các quy trình và hành động của nó trong Magento 2 magento.stackexchange.com/questions/90510/ Đổi
Yogesh

Phiên bản Magento nào bạn đang sử dụng? Khá nhiều thay đổi đã được thực hiện trong v1.13 - vì vậy hãy mong đợi sự khác biệt trong phiên bản trước phiên bản đó. Đây là một bài đăng blog hay giải thích mô-đun mView và lập chỉ mục trong phiên bản 1.13 của Magento: eschrade.com/page/ Kẻ
Pitt

Câu trả lời:


63

Có nhiều loại chỉ mục khác nhau trong Magento.
Tất cả các chỉ mục đều ở đó để làm cho mọi thứ chạy nhanh hơn.
Tôi sẽ chỉ đề cập ở đây một vài trong số họ.

Chỉ số phẳng
Có 2 chỉ số như vậy. Một cho các loại và một cho các sản phẩm.
Theo mặc định, các thực thể danh mục và sản phẩm (và khách hàng và địa chỉ khách hàng nhưng chúng không quan trọng trong tình huống này) là các thực thể EAV . Điều này là rất tốt đẹp cho khả năng mở rộng. Nhưng đó là một kẻ giết người hiệu suất bởi vì để có được tất cả các giá trị cho tất cả các thuộc tính, bạn cần rất nhiều phép nối hoặc nhiều truy vấn.
Đây là nơi mà chỉ số phẳng đi vào chơi.
Nó biến đổi cấu trúc EAV thành cấu trúc phẳng. Ý tôi là nó tạo một bảng (một bảng cho mỗi lượt xem cửa hàng trong Magento) có một cột tương ứng với một thuộc tính. Điều này làm cho lựa chọn nhanh hơn. Đối với danh mục, tất cả các thuộc tính được chuyển đổi thành cột bảng. Đối với các sản phẩm chỉ có những sản phẩm bạn đánh dấu là 'Được sử dụng trong danh sách sản phẩm' bởi vì bạn có thể bán tất cả các loại sản phẩm có thuộc tính khác nhau và việc tạo một bảng với cột có giá trị có thể không thực hiện được.
Ngoài ra, một số sản phẩm có thể bị vô hiệu hóa hoặc có thể không thuộc về một trang web nhất định và không cần đưa chúng vào các mục để tìm kiếm. Chúng được loại trừ bởi người lập chỉ mục.
Các bảng phẳng được tạo ra được sử dụng để đọc dữ liệu trong fronend. Phần cuối vẫn sử dụng cấu trúc EAV.

Chỉ mục tìm kiếm danh mục
Bạn có thể tìm kiếm sản phẩm theo nhiều giá trị thuộc tính. Một số trong số chúng có thể không được bao gồm trong các bảng phẳng được tạo bởi bộ chỉ mục phẳng. Chỉ mục này điền vào một bảng với các giá trị thuộc tính có thể tìm kiếm cho các sản phẩm để dễ dàng tìm kiếm chúng dựa trên các từ khóa. Có tất cả thông tin trong một bảng (hoặc một trường) giúp có thể sử dụng Tìm kiếm toàn văn bản và nhận được kết quả có liên quan.

Giá sản phẩm .
Giá của một sản phẩm có thể bị ảnh hưởng bởi nhiều biến. Ví dụ, nhóm khách hàng, trang web, quy tắc giảm giá danh mục.
Tương tự như trên, nhận được các sản phẩm với giá của chúng sẽ có nghĩa là rất nhiều tham gia hoặc nhiều lựa chọn. Ngoài ra các sản phẩm bó có một hệ thống giá kỳ lạ. Trình chỉ mục này tổng hợp dữ liệu trong một số bảng ( catalog_product_index_price_*) và làm cho việc chọn (sắp xếp và lọc) dễ dàng hơn nhiều.

Danh mục url Viết lại
Điều này làm sạch các quy tắc viết lại url bằng cách đặt url tương ứng với sản phẩm hoặc danh mục nào. Cách dễ dàng hơn để hệ thống nội bộ quản lý url quyết định trang nào bạn nên xem khi gọi url không chuẩn. Thay vì tìm kiếm thông qua tất cả các khóa URL của sản phẩm và danh mục, nó chỉ tìm kiếm trong một bảng.

Danh mục sản phẩm
Trong Magento, bạn có thể đặt thuộc tính danh mục có tên 'Is Anchor' thành đúng hoặc sai. Nếu đúng, điều đó có nghĩa là danh mục được đề cập sẽ liệt kê tất cả các sản phẩm từ danh mục con. Một lần nữa, việc xác định thời gian thực này sẽ tốn nhiều tài nguyên hơn là chỉ đọc một bảng. Trình lập chỉ mục này tạo liên kết giữa các sản phẩm và danh mục dựa trên các liên kết bạn đã đặt trong phụ trợ và cờ 'Is Anchor' trên các danh mục.

Tình trạng chứng khoán
Đối với các sản phẩm đơn giản, thật dễ dàng. Chúng có thể tồn kho hoặc hết hàng, nhưng đối với cấu hình, nhóm và gói không phải là dễ dàng. Chúng có thể tồn kho hoặc hết hàng tùy thuộc vào các sản phẩm con liên quan đến sản phẩm chính. Một lần nữa (tôi chỉ lặp lại chính mình ở đây) nhận được trạng thái thời gian thực của họ có nghĩa là rất nhiều truy vấn.

Thuộc tính sản phẩm .
Điều này thu thập tất cả các thuộc tính có thể được sử dụng trong điều hướng lớp cho cùng một lý do. Có tất cả chúng ở một nơi để đọc nhanh hơn.

Tag Uẩn
tôi không biết cái này làm gì. Tôi chưa bao giờ sử dụng thẻ trong một dự án trực tiếp thực sự.


cảm ơn marius đây là câu trả lời hay nhất ... tôi đã có
sonam

Ý bạn là gì khi bạn nói rằng các bảng phẳng chỉ được sử dụng ở lối vào (và phụ trợ vẫn sử dụng cấu trúc EAV)? Tôi là người mới và theo những gì tôi hiểu, khi chúng tôi tạo / cập nhật các thực thể như sản phẩm, nó vẫn sử dụng các bảng EAV để thực hiện các thao tác này và chúng tôi đặt tùy chọn cập nhật các bảng phẳng khi lưu hoặc cập nhật thủ công cho những thay đổi này sẽ được phản ánh trong các bảng phẳng. Bạn đang đề cập đến quá trình này khi bạn nói điều đó? Bạn có thể giải thích về điều này xin vui lòng? Cảm ơn!
Bharadwaj Srigiriraju

1
@Marius: Trong quá trình lập chỉ mục lại, tôi gặp lỗi toàn bộ bảng. Hãy giúp tôi. Lỗi tôi nhận được là Bảng 'catalog_product_index_price_bundle_sel_tmp' đã đầy
zed Blackbeard

1
@Marius sau 3 năm của câu trả lời này bây giờ bạn có ý tưởng gì về Tổng hợp thẻ không, nó có liên quan đến thẻ sản phẩm không ??
Murtuza Zabuawala

1
@Đen. Bạn có 2 cài đặt cho các chỉ mục. "Cập nhật khi lưu" và "Thủ công". Để cập nhật về lưu, mọi thứ sẽ tự động xảy ra khi bạn lưu sản phẩm. Nhưng điều này có thể gây ra vấn đề hiệu suất. Ví dụ nếu bạn thay đổi nhiều sản phẩm cùng một lúc. Đối với chế độ thủ công, không có reindexing được kích hoạt ngay sau khi lưu, nhưng bạn phải xây dựng lại thủ công khi hoàn thành.
Marius

11

Không thể lấy tín dụng cho việc này vì nó được lấy từ bài đăng gốc tại: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail

Lập chỉ mục của Magento chỉ tương tự như lập chỉ mục cấp cơ sở dữ liệu. Như Anton tuyên bố, đó là một quá trình không chuẩn hóa để cho phép hoạt động nhanh hơn của một trang web. Hãy để tôi thử giải thích một số suy nghĩ đằng sau cấu trúc cơ sở dữ liệu Magento và lý do tại sao nó khiến việc lập chỉ mục cần thiết để hoạt động ở tốc độ.

Trong cơ sở dữ liệu MySQL "điển hình" hơn, một bảng để lưu trữ các sản phẩm danh mục sẽ được cấu trúc giống như thế này:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Việc này rất nhanh để truy xuất, nhưng nó để lại một vấn đề cơ bản cho một phần mềm Thương mại điện tử: bạn sẽ làm gì khi muốn thêm nhiều thuộc tính? Điều gì nếu bạn bán đồ chơi, và thay vì một cột kích thước, bạn cần age_range? Chà, bạn có thể thêm một cột khác, nhưng rõ ràng là trong một cửa hàng lớn (ví dụ như Walmart), điều này sẽ dẫn đến các hàng trống 90% và cố gắng duy trì các thuộc tính mới là không thể.

Để chống lại vấn đề này, Magento chia các bảng thành các đơn vị nhỏ hơn. Tôi không muốn tạo lại toàn bộ hệ thống EAV trong câu trả lời này, vì vậy vui lòng chấp nhận mô hình đơn giản hóa này:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Bây giờ có thể thêm các thuộc tính theo ý muốn bằng cách nhập các giá trị mới vào sản phẩm_ phân phối và sau đó đặt các bản ghi liền kề vào sản phẩm_attribution_values. Về cơ bản, đây là những gì Magento làm (với một chút tôn trọng các kiểu dữ liệu hơn tôi đã hiển thị ở đây). Trên thực tế, hiện tại không có lý do nào để hai sản phẩm có các trường giống hệt nhau, vì vậy chúng tôi có thể tạo toàn bộ các loại sản phẩm với các bộ thuộc tính khác nhau!

Tuy nhiên, sự linh hoạt này đi kèm với một chi phí. Nếu tôi muốn tìm màu áo trong hệ thống của mình (một ví dụ tầm thường), tôi cần tìm:

  1. Product_id của mặt hàng (trong bảng sản phẩm)
  2. Thuộc tính_id cho màu (trong bảng thuộc tính)
  3. Cuối cùng, giá trị thực tế (trong bảng property_values)

Magento đã từng làm việc như thế này, nhưng nó đã chết chậm. Vì vậy, để cho phép hiệu suất tốt hơn, họ đã thỏa hiệp: một khi chủ cửa hàng đã xác định các thuộc tính họ muốn, hãy tiếp tục và tạo bảng lớn ngay từ đầu. Khi một cái gì đó thay đổi, nuke nó từ không gian và tạo lại nó. Bằng cách đó, dữ liệu được lưu trữ chủ yếu ở định dạng linh hoạt tốt đẹp của chúng tôi, nhưng được truy vấn từ một bảng duy nhất.

Các bảng tra cứu kết quả này là "chỉ mục" Magento. Khi bạn lập chỉ mục lại, bạn sẽ làm nổ bảng cũ và tạo lại nó.

Hy vọng rằng làm rõ mọi thứ một chút!


nuke it from space, tốt đẹp :)
Wietse

5

Magento là một hệ thống khá mạnh mẽ và phức tạp. Nó cho phép làm việc với lượng dữ liệu khổng lồ, nhưng khi cơ sở dữ liệu bị quá tải với hàng tấn hồ sơ, nó trở nên nặng nề và chậm chạp. Magento sử dụng các chỉ mục để giải quyết vấn đề này. Các chỉ mục là các bảng cơ sở dữ liệu bổ sung với một số dữ liệu phẳng, cho phép tổ chức các phản hồi nhanh từ cơ sở dữ liệu.

Theo mặc định, hệ thống cốt lõi cập nhật các chỉ mục trên mỗi mục lưu. Nhưng trong một số trường hợp, bạn cần thực hiện thủ công, ví dụ như một số loại hành động hàng loạt, v.v. Bạn có thể cập nhật chỉ mục bất kỳ lúc nào từ phụ trợ quản trị viên (Quản trị-> Hệ thống-> Quản lý chỉ mục). Nhưng đôi khi nó gây ra vấn đề.

Ví dụ: nếu bạn có 10k + sản ​​phẩm và nhiều danh mục, việc xây dựng lại chỉ mục 'viết lại url danh mục' có thể mất hàng giờ. Sau đó, tập lệnh php chỉ có thể bị hỏng do vượt quá max_execut_time. Có một cách để giải quyết một số vấn đề bằng cách chạy quy trình reindex từ dòng lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.