2012-12-21 28 views
5

Tôi đang cố xóa tài liệu bằng cách sử dụng zend lucene. Sau đây là mã của tôiZend Lucene Xóa tài liệu số

$index = Zend_Search_Lucene::open('data/index'); 
foreach ($index->find('pk:' . $this->getId()) as $hit) { 
     $index->delete($hit->id); 
    } 
$index->commit(); 

Khi tôi chạy này và kiểm tra thư mục chỉ số của tôi có một tập tin mới được tạo ra như _f4t5_1.del này

Nhưng khi tôi thực hiện tìm kiếm, các file cần phục có sẵn trong tìm kiếm và cũng đã kiểm tra

$ index-> ​​numDocs();

Phương thức này cũng trả về cùng một số trước và sau khi xóa.

Mọi trợ giúp đều được đánh giá cao.

Trả lời

3

Chỉ tìm thấy sự cố. Vấn đề là do lỗi logic trong mã của tôi. Sau khi xóa, tôi đã gọi một hàm khác mà lại thêm tài liệu vào chỉ mục. Khi tôi kiểm tra ID tài liệu nếu thấy nó khác sau khi xóa và điều đó đã giúp tôi theo dõi vấn đề. Cảm ơn sự giúp đỡ

2

Điều này có thể hữu ích: php lucene how to update and delete rows in index file

Bạn đã kiểm tra để đảm bảo rằng tài liệu thực sự bị xóa.

Zend_Search_Lucene :: isDeleted ($ id) phương pháp có thể được sử dụng để kiểm tra xem một tài liệu sẽ bị xóa.

for ($count = 0; $count < $index->maxDoc(); $count++) { 
    if ($index->isDeleted($count)) { 
     echo "Document #$id is deleted.\n"; 
    } 
} 

Các bạn đã thử chạy index optimization:

Index tối ưu hóa loại bỏ các tài liệu bị xóa và ép ID tài liệu trong một phạm vi nhỏ hơn. Do đó, id nội bộ của tài liệu có thể thay đổi trong quá trình tối ưu hóa chỉ mục.

+0

Tôi đã thử tối ưu hóa chỉ mục. Khi tối ưu hóa nó đã xóa các tệp như với phần mở rộng .del nhưng khi tìm kiếm chỉ mục, các tài liệu đã xóa cũng được trả lại trong kết quả tìm kiếm. –

+0

Tại sao không lặp lại và sử dụng '$ index-> ​​isDeleted ($ id)' để xóa tài liệu đã xóa khỏi kết quả tìm kiếm. – JSuar

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