2010-10-13 33 views
5

Mặc dù là một tổng số newbie, có thể là câu hỏi này là khá ngây thơ. Tôi muốn tìm kiếm chỉ mục của mình dựa trên chỉ mục. Vì vậy, tôi đã thử tạo một tài liệu chỉ với một chỉ mục, Tên, và sau đó muốn tìm kiếm trường cụ thể đó.Tìm kiếm theo lĩnh vực ở Lucene

Tôi đang làm điều này trong quá trình cố gắng tìm hiểu xem tôi có thể cập nhật các trường của tài liệu mà không thực sự xóa tài liệu một cách sáng suốt hay không.

Cảm ơn.

Trả lời

0

Tôi đang làm điều này trong quá trình cố gắng tìm hiểu xem tôi có thể cập nhật các trường của tài liệu mà không thực sự xóa tài liệu một cách sáng suốt hay không.

Tôi không hiểu câu hỏi đầu tiên, nhưng bạn không thể cập nhật tài liệu trong Lucene. Bạn phải xóa và chèn lại.

+0

Hi Thilo, tôi chỉ muốn tìm kiếm chỉ mục của mình theo trường. Ví dụ, tôi muốn lấy giá trị của một trường cụ thể [nói Tên] trong chỉ mục của tôi. Thông thường bạn làm điều đó bởi Document.getField ("Tên") nếu bạn biết tài liệu nhưng tôi không thể làm cho nó hoạt động trong khi tìm kiếm chỉ mục. – Sunil

+1

Document.getField sẽ chỉ hoạt động nếu trường được STORED (và không chỉ INDEXED). – Thilo

4

Bạn có thể tìm kiếm các từ trong một trường cụ thể với cú pháp kết tràng tức là name:john.

Nhưng vì nhiều chỉ mục chỉ có một trường bạn muốn tìm kiếm, có trường mặc định, trong trường hợp bạn chỉ cần tìm kiếm john. Bạn có thể thiết lập mà lĩnh vực đó là khi bạn instanciate QueryParser bạn

QueryParser parser = new QueryParser(Version.LUCENE_30, "name", anAnalyzer); 
Query q = parser.parse("john"); 

Nếu bạn muốn tạo truy vấn của bạn lập trình chứ không phải là phân tích một chuỗi truy vấn do người dùng nhập vào, sau đó bạn cũng phải xác định lĩnh vực này một cách rõ ràng, ví dụ:

Query q = new TermQuery(new Term("name", "john")); 

Liên kết: Using fields in Lucene queries (Lucene Query Syntax) | QueryParser Javadoc | TermQuery Javadoc

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