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";
}
}
}
Đ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
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. –