Khi lập chỉ mục, Lucene chia văn bản thành các đơn vị nguyên tử (mã thông báo). Trong giai đoạn này nhiều điều có thể xảy ra (ví dụ: giảm giá, xuất phát, loại bỏ các từ dừng, v.v.). Kết quả cuối cùng là một thuật ngữ.
Sau đó, khi bạn truy vấn, Lucene áp dụng chính xác cùng một thuật toán cho truy vấn để nó có thể đối sánh cụm từ với một cụm từ.
Q: Tại sao không TermQuery
yêu cầu máy phân tích?
A: QueryParser
đối tượng phân tích chuỗi truy vấn và tạo TermQuery
(cũng có thể tạo các loại truy vấn khác, ví dụ: PhraseQuery
). TermQuery
đã chứa các cụm từ có cùng hình dạng giống như trong chỉ mục. Nếu bạn (với tư cách là lập trình viên) hoàn toàn chắc chắn bạn đang làm gì, bạn có thể tự mình tạo ra một mình TermQuery
- nhưng điều này giả định bạn biết trình tự phân tích cú pháp truy vấn chính xác và bạn biết các thuật ngữ trông như thế nào trong chỉ mục.
Q: Tại sao không BooleanQuery
yêu cầu máy phân tích?
A: BooleanQuery
chỉ tham gia các truy vấn khác bằng cách sử dụng toán tử (VÀ/HOẶC/PHẢI/NÊN, vv). Nó không thực sự hữu ích mà không có bất kỳ truy vấn nào khác.
Đây là rất câu trả lời đơn giản. Tôi khuyên bạn nên đọc sách Introduction to Information Retrieval; nó chứa lý thuyết dựa trên đó Lucene (và các khuôn khổ tương tự khác) được viết. Cuốn sách này có sẵn trực tuyến miễn phí.
Cảm ơn nhưng không giải thích tại sao chỉ định trình phân tích chỉ được yêu cầu khi phân tích cú pháp chuỗi để truy vấn và không phải lúc nào khi truy vấn. – haim770
Đã chỉnh sửa câu trả lời của tôi, hãy cho tôi biết nếu nó không đủ rõ ràng hoặc bỏ lỡ bất cứ điều gì. – mindas