2009-11-01 23 views
5

Tôi chỉ muốn một số nút nhất định được lập chỉ mục. Mô-đun "cấu hình tìm kiếm" tuyên bố có khả năng này, nhưng nó không hoạt động. Vì vậy, làm cách nào để chỉnh sửa mô-đun nút để chỉ lập chỉ mục các nút nhất định hoặc tốt hơn, hãy mô phỏng một mô-đun có thể làm điều này cho tôi?Làm cách nào để hạn chế tìm kiếm drupal khỏi lập chỉ mục tất cả các loại nội dung?

+1

Xác định "không hoạt động". Bạn đã liên hệ với các nhà bảo trì cấu hình tìm kiếm để được hỗ trợ chưa? – ceejayoz

+1

Bởi không hoạt động, tôi có nghĩa là nó ngăn chặn chúng hiển thị trong kết quả tìm kiếm, nhưng nó không dừng lập chỉ mục của các nút này. Đó là những gì tôi cần. – coderama

Trả lời

3

Đây là a long standing feature request, nhưng có vẻ như nó đã được đẩy lên ít nhất Drupal 8:/

Bạn có thể tìm thấy một số gợi ý cách giải quyết trong các cuộc thảo luận tính năng yêu cầu liên kết ở trên, nhưng cách tiếp cận 'tiêu chuẩn' được sử dụng bởi mô-đun cấu hình tìm kiếm là described here. Nó không ngăn các nút được lập chỉ mục, nhưng thao tác các truy vấn tìm kiếm để bỏ qua các mục nhất định (ví dụ: các loại nút) để chúng không hiển thị trên các trang kết quả tìm kiếm.

Vì không có giải pháp rõ ràng hơn vào lúc này (afaik), tôi đồng ý với nhận xét của ceejayoz rằng trước tiên bạn nên kiểm tra lý do mô-đun cấu hình tìm kiếm không hoạt động cho bạn trước khi bắt đầu tùy chỉnh giải pháp của riêng bạn.

Nếu bạn phải sử dụng để chỉnh sửa mô đun nút, node_update_index() sẽ là nơi bắt đầu.

3

Dưới đây là các truy vấn xác định những gì cần phải được lập chỉ mục, từ node_update_index():

SELECT n.nid FROM {node} n 
    LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid 
    WHERE d.sid IS NULL OR d.reindex <> 0 
    ORDER BY d.reindex ASC, n.nid ASC 

Bạn không thể ngăn chặn kịch bản lập chỉ mục từ chạy. Nhưng bạn có thể đánh lừa truy vấn đó vào nội dung suy nghĩ đã được lập chỉ mục bằng cách chèn các mục nhập giả vào {search_dataset}.

Ví dụ, nếu bạn đang sử dụng MySQL, làm điều này trên cron:

INSERT INTO {search_dataset} 
    (sid, type, data, reindex) 
    SELECT nid, 'node', '', 0 FROM {node} WHERE node.type IN (RESTRICTED_TYPES) 
    ON DUPLICATE KEY UPDATE reindex = 0, data = '' 

Thay thế "RESTRICTED_TYPES" với danh sách các loại nút, và làm một truy vấn tương tự cho từng đối tượng bạn muốn hạn chế từ Tìm kiếm.

+1

Bạn cũng có thể muốn dọn dẹp bảng search_index của mình, điều này có thể cực kỳ cồng kềnh, như vậy: "DELETE from search_index where sid in (SELECT nid FROM node WHERE node.type IN (RESTRICTED_TYPES)" – aaronbauman

+0

Một điều nữa, bạn có thể cần phải dọn sạch bảng search_total của bạn theo cách thủ công nếu bạn có một cơ sở dữ liệu rất lớn: "DELETE FROM search_total WHERE từ NOT IN (SELECT DISTINCT từ FROM search_index)". Nếu không search.module hết bộ nhớ đang cố gắng tải tất cả các mục bị thiếu trong một một truy vấn. – aaronbauman

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