2012-08-09 36 views
6

Tôi đang chơi với Trình xử lý lập chỉ mục tìm kiếm tùy chỉnh cho SDL Tridion 2011 (GA). Tôi có một cái gì đó làm việc, sử dụng very helpful information provided by Arjen, tuy nhiên tôi không chắc chắn nếu thực hiện của tôi là lựa chọn tốt nhất.Trình xử lý chỉ mục tìm kiếm Tridion tùy chỉnh: Trường tùy chỉnh so với chuẩn cho url trang?

Yêu cầu là để có thể tìm kiếm các trang trong CMS theo url (ví dụ: www.example.com/news/index.html). Để làm điều này, tôi đã tạo một lớp bằng cách sử dụng giao diện ISearchIndexingHandler (mã bên dưới). Tôi lập chỉ mục url trong trường ContentText của mục, tuy nhiên tôi không chắc chắn nếu điều này thường sẽ chứa một cái gì đó khác cho một trang (tôi nghĩ rằng một trang chỉ có siêu dữ liệu vì vậy điều này nên được OK). Lợi thế của việc sử dụng điều này trong trường tùy chỉnh là tôi có thể chỉ cần nhập url vào hộp tìm kiếm mà không phải sử dụng <url> IN < tên trường > hoặc một cái gì đó tương tự.

Vì vậy, câu hỏi của tôi là, có bất kỳ lý do nào không sử dụng ContentText cho Trang hay không và có lợi thế nào khi sử dụng trường tùy chỉnh không? Ngoài ra, các điểm thưởng cho bất kỳ ai có ý tưởng hay về cách xử lý BluePrinting (nếu tôi tạo một trang trong ấn phẩm gốc, tôi muốn các url địa phương cũng được lập chỉ mục trong các ấn phẩm con) và trường hợp đường dẫn nhóm cấu trúc bị thay đổi (Tôi đoán tôi bằng cách nào đó có thể kích hoạt một chỉ mục lại các mục trang con từ bên trong trình xử lý lập chỉ mục của tôi).

Mã:

using System; 
using Tridion.ContentManager.Search; 
using Tridion.ContentManager.Search.Indexing.Handling; 
using Tridion.ContentManager.Search.Indexing.Service; 
using Tridion.ContentManager.Search.Indexing; 
using Tridion.ContentManager.Search.Fields; 

namespace ExampleSearchIndexHandler 
{ 
    public class PageUrlHandler : ISearchIndexingHandler 
    { 
     public void Configure(SearchIndexingHandlerSettings settings) 
     {    
     } 

     public void ExtractIndexFields(IdentifiableObjectData subjectData, Item item, CoreServiceProxy serviceProxy) 
     { 
      PageData data = subjectData as PageData; 
      if (data != null) 
      { 
       PublishLocationInfo info = data.LocationInfo as PublishLocationInfo; 
       string url = GetUrlPrefix(data) + info.PublishLocationUrl; 
       item.ContentText = url; 
      } 
     } 

     private string GetUrlPrefix(PageData page) 
     { 
      //hardcoded for now, but will be read from publication metadata 
      return "www.example.com"; 
     } 
    } 
} 

Trả lời

5

Bạn có thể lưu trữ các url trong tài sản ContextText. Trường Thies được sử dụng để lập chỉ mục dữ liệu Nội dung mẫu.

Tridion không lập chỉ mục (các) mục được chia sẻ của ấn phẩm con.

Lập chỉ mục được kích hoạt trên Sửa đổi mục (tạo, cập nhật, xóa, bản địa hóa và hủy tiêu điểm). Hoặc bạn có thể sử dụng công cụ reindexing để tái mục nhập ur. nhưng không có cách nào để lập chỉ mục các mục được chia sẻ trong ấn phẩm con.

3

Tôi không nghĩ bạn có thể bao gồm tiền tố URL trong cả truy vấn tìm kiếm của bạn dưới dạng mục được lập chỉ mục. Vì các mục được chia sẻ không được lập chỉ mục, bạn có thể sẽ lập chỉ mục Trang từ lớp Cấu trúc Trang web, không bao giờ được xuất bản.

Khi nhóm cấu trúc được di chuyển, bạn sẽ phải tạo trình xử lý sự kiện kích hoạt lập chỉ mục lại tất cả các trang con bằng cách sử dụng một phương thức được bảo vệ của API TOM.NET. Phương pháp này không phải là một phần của API công khai, vì vậy việc đăng mã cho giải pháp đó có thể sẽ khai báo cho tôi một cá nhân không phải là grata với R & D :)

Trước khi bạn lập chỉ mục lại bất cứ điều gì bạn nên lưu trữ url vị trí xuất bản ban đầu của Nhóm cấu trúc trong thuộc tính TcmEventArgs.ContextVariables, vì vậy bạn có thể xác minh xem hành động lập chỉ mục lại có cần thiết hay không.

+0

Điểm tốt về việc chỉ kích hoạt lại chỉ mục nếu URL xuất bản SG đã thay đổi - điều này có thể tránh được việc lập lại chỉ mục nặng cho các trang web lớn. Vì SG không được phiên bản, tôi đoán cách duy nhất để làm điều này là trong hệ thống sự kiện như bạn đã nói. – Will

+0

Có, chỉnh sửa của bạn là chính xác. Tôi đã có nghĩa là Nhóm cấu trúc thay vì Trang. –

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