2013-03-05 23 views
6

Tôi mới dùng Lucene và cố phân tích cú pháp một chuỗi thô thành Query bằng cách sử dụng QueryParser.Tại sao Lucene QueryParser cần một Analyzer

Tôi đã tự hỏi, tại sao phương pháp QueryParser.Parse() cần một tham số Analyzer?

Nếu phân tích được cái gì đó đã làm với truy vấn, sau đó một Analyzer nên được chỉ định khi giao dịch với thường xuyên Query đối tượng cũng như (TermQuery, BooleanQuery vv), và nếu không, tại sao QueryParser đòi hỏi nó?

Trả lời

10

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í.

+0

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

+0

Đã 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

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