2010-04-17 34 views
9

Tôi đang sử dụng solrj làm ứng dụng khách để lập chỉ mục tài liệu trên máy chủ solr.Xóa chỉ mục khỏi Solr bằng cách sử dụng solrj làm ứng dụng khách

Tôi gặp sự cố khi xóa chỉ mục theo 'id' từ máy chủ solr. Tôi đang sử dụng mã sau đây để xóa các chỉ số:

server.deleteById("id:20"); 
server.commit(true,true); 

Sau này khi tôi một lần nữa tìm kiếm các tài liệu, các kết quả tìm kiếm có chứa các tài liệu trên cũng có. Không biết điều gì đang xảy ra với mã này. Hãy giúp tôi giải quyết vấn đề.

Cảm ơn!

Trả lời

16

Khi bạn gọi deleteById, chỉ cần sử dụng id, mà không cú pháp truy vấn:

server.deleteById("20"); 
server.commit(); 
+0

tôi được sử dụng này, nhưng điều này không làm việc trong trường hợp của tôi –

+0

sẽ làm việc này ngay cả khi các id tài liệu là số nguyên? –

1

Sau khi bạn xóa các tài liệu, cam kết máy chủ và thêm những dòng sau. Sau khi máy chủ cam kết dòng.

UpdateRequest req = new UpdateRequest(); 
    req.setAction(UpdateRequest.ACTION.COMMIT, false, false); 
    req.add(docs); 
    UpdateResponse rsp = req.process(server); 
-1

Vì vậy, deleteById sẽ chỉ hoạt động nếu bạn đang tạo khóa bằng cách chỉ sử dụng một thuộc tính. Vì vậy, tôi đã có trường hợp id là một sự kết hợp của nhiều thuộc tính như employeeId + deptId. Nhưng, bảng của tôi có employeeId & deptId như các cột riêng biệt cũng như với các chỉ mục được tạo trên nó. Vì vậy, khi tôi muốn xóa một bản ghi tôi chỉ có employeeId và không deptId. Tôi đã sử dụng lệnh curl để xóa nơi bạn có thể chỉ định cột và giá trị của nó và nó sẽ xóa toàn bộ bản ghi.

Ví dụ: curl http://localhost:8983/solr/update --data ':' -H 'Loại nội dung: văn bản/xml; charset = utf-8'

0

Sử dụng phương pháp deleteByQuery() để xóa các tài liệu phù hợp với truy vấn:

server.deleteByQuery("id:20"); 
server.commit(); 
Các vấn đề liên quan