2011-02-02 38 views
8

Chúng tôi đang sử dụng Lucene để tìm kiếm văn bản như một phần của sitecore. Có phương pháp nào để bỏ qua các từ dừng (như a, an, ...) trong tìm kiếm sitecore không?dừng các từ trong sitecore

+0

Trường hợp sử dụng này là gì? Nếu bạn tìm kiếm ** con mèo trong chiếc mũ ** bạn muốn nó thực sự chỉ tìm kiếm như thể bạn đã nhập ** mũ mèo **? Hay bạn có nghĩa là lọc chúng ra trong kết quả? –

Trả lời

14

Theo mặc định, Sitecore sử dụng máy phân tích chuẩn Lucene - Lucene.Net.Analysis.Standard.StandardAnalyzer. Bạn có thể thấy điều này được xác định trong phần tử /configuration/sitecore/search/analyzer của tệp web.config. Một trong các hàm tạo của lớp StandardAnalyzer chấp nhận chuỗi các chuỗi nó sẽ xem xét dừng các từ. Theo mặc định nó sử dụng danh sách mã hóa cứng các từ dừng trong đó bao gồm:

"a", "an", "và", "là", "là", "tại", "được", "nhưng "," theo "," cho "," nếu "," trong ", " vào "," là "," nó "," không "," không "," của ", " trên "," hoặc "," chẳng hạn "," đó ",", ", " của họ "," sau đó "," ở đó "," các "này, " chúng "," này "," tới "," đã "," sẽ ", 'với'

Nếu bạn muốn thay đổi hành vi này, tôi nghĩ bạn nên kế thừa StandardAnalyzer và ghi đè constructor mặc định của nó để có những điểm dừng w ords từ một nguồn khác thay vì mảng hardcoded. Bạn có nhiều tùy chọn, thậm chí đọc nó từ một tập tin văn bản. Đừng quên thay thế các lớp tiêu chuẩn với bạn trong web.config.

Xem các nhà thầu khác của StandardAnalyzer lớp học để biết thêm chi tiết. .NET Reflector là bạn của bạn ở đây.

+0

Cảm ơn bạn .. nếu bạn có thể xin chia sẻ trái tim của mã .. – rahul

+0

Bạn có ý nghĩa gì? Mã tôi tham chiếu trong câu trả lời ở trên được đặt trong Lucene.Net.dll (trong thư mục Sitecore/bin). Bạn có thể duyệt thư viện của bên thứ ba này bằng .NET Reflector. Những gì tôi đề nghị làm trong trường hợp của bạn là tạo một lớp mới, kế thừa nó từ StandardAnalyzer, và làm cho hàm tạo mặc định tìm kiếm các từ dừng theo cách khác (cách bạn chọn). Có những ví dụ về điều này trong mã của các nhà xây dựng khác của lớp StandardAnalyzer. –

+1

BTW, Alex Shyba vừa xuất bản một bài đăng blog tóm tắt tuyệt vời về tìm kiếm với Sitecore & Lucene: http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore. html. Bài đăng này cũng có đầy đủ các liên kết hữu ích cho các tài nguyên khác nhau về chủ đề. Hãy chắc chắn để kiểm tra xem nó ra trước khi di chuyển về phía trước trong khu vực này! –

4

Một ví dụ cho Yans bài:

public class CaseAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer 
{ 
    private static Hashtable stopWords = new Hashtable(); //{{"by","by"}}; <-- Makes "by" a stopword that will not be matched in analyzer 
    public CaseAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_29, stopWords) 
    {  
    } 
} 

này nên được đăng ký trong web.config dưới

/configuration/sitecore/search/analyzer 

một ví dụ về việc đăng ký phân tích

<caseanalyzer type="EBF.Business.Search.Analyzers.CaseAnalyzer, EBF.Business, Version=1.0.0.0, Culture=neutral"/> 

Cuối cùng bạn chỉ cần đăng ký bộ phân tích của bạn trong cấu hình tìm kiếm như s

<Analyzer ref="search/caseanalyzer" /> 
Các vấn đề liên quan