Nói chung, bất kỳ bộ phân tích nào trong Lucene đều là bộ lọc tokenizer + stemmer + stop-words.
Tokenizer chia văn bản của bạn thành nhiều phần và vì các máy phân tích khác nhau có thể sử dụng các trình phân tích khác nhau, bạn có thể nhận được các luồng mã thông báo đầu ra khác nhau , tức là chuỗi các phần văn bản. Ví dụ: KeywordAnalyzer
bạn đã đề cập hoàn toàn không tách văn bản và lấy tất cả trường làm mã thông báo duy nhất. Đồng thời, StandardAnalyzer
(và hầu hết các máy phân tích khác) sử dụng dấu cách và dấu chấm câu làm điểm phân tách. Ví dụ, đối với cụm từ "Tôi rất hạnh phúc", nó sẽ tạo ra danh sách ["i", "am", "rất", "hạnh phúc"] (hoặc một cái gì đó tương tự). Để biết thêm thông tin về các trình phân tích / mã hóa cụ thể, hãy xem Tài liệu Java của nó .
Stemmers được sử dụng để lấy gốc của một từ được đề cập. Nó phụ thuộc nhiều vào ngôn ngữ được sử dụng. Ví dụ, đối với cụm từ trước đó bằng tiếng Anh sẽ có một cái gì đó như [ "i", "có", "veri", "happi"] được sản xuất, và cho Pháp "Je suis très Heureux" một số loại máy phân tích Pháp (như SnowballAnalyzer
, khởi tạo với "tiếng Pháp") sẽ tạo ra ["je", "être", "tre", "heur"]. Tất nhiên, nếu bạn sử dụng trình phân tích của một ngôn ngữ này để tạo văn bản bằng ngôn ngữ khác, thì các quy tắc từ ngôn ngữ khác sẽ được sử dụng và trình gốc có thể tạo ra kết quả không chính xác. Nó không phải là lỗi của tất cả hệ thống, nhưng kết quả tìm kiếm sau đó có thể kém chính xác hơn.
KeywordAnalyzer
không sử dụng bất kỳ trình tạo gốc nào, nó vượt qua tất cả các trường không bị sửa đổi. Vì vậy, nếu bạn định tìm kiếm một số từ trong văn bản tiếng Anh, bạn không nên sử dụng trình phân tích này.
Từ dừng là những từ thường xuyên nhất và hầu như vô dụng. Một lần nữa, nó phụ thuộc rất nhiều vào ngôn ngữ. Đối với tiếng Anh, những từ này là "a", "the", "I", "be", "have", v.v. Bộ lọc từ dừng loại bỏ chúng khỏi luồng mã thông báo để giảm nhiễu trong kết quả tìm kiếm, vì vậy cuối cùng cụm từ của chúng tôi là "Tôi 'm rất vui "với StandardAnalyzer
sẽ được chuyển thành danh sách [" verify "," happiness "].
Và KeywordAnalyzer
một lần nữa không làm gì cả. Vì vậy, KeywordAnalyzer
được sử dụng cho những thứ như ID hoặc số điện thoại, nhưng không được sử dụng cho văn bản thông thường.
Và đối với maxClauseCount
ngoại lệ của bạn , tôi tin rằng bạn sẽ hiểu được khi tìm kiếm. Trong trường hợp này hầu hết có lẽ là do truy vấn tìm kiếm quá phức tạp. Cố gắng chia nó thành nhiều truy vấn hoặc sử dụng các chức năng cấp thấp hơn.