Pete, I appreciate the input. getDocument() I beileve returns the actual document, so you avoid name collisions like te internal I'd or instance,. but the problem is that $hits is empty. so the foreach is never excuting.
On 6/21/08, Pete Spicer <[EMAIL PROTECTED]> wrote: > Hello, > Can't see anything obviously wrong with it, but I have one idea which > might make some tiny difference... > > Personally in my own scripts where I do a delete, in the foreach loop, I > don't pull anything fancy out from each $hit instance, I simply > reference $hit->id for the internal document - every document in a > Lucene index will have its internal ID, which is what you really need to > be establishing in the foreach loop, so you can then apply the delete > method using that ID - try switching to $hit->id instead of referencing > getDocument and see what results you get. You should at least get an id > of some kind (bearing in mind that 0 as an id is valid) > > To be honest, I'm not sure what the getDocument() method is actually > doing, as I can't find it readily documented anywhere; the core code I > had came directly from the manual. > > Sorry I can't be more help, > Pete > > Josh Team wrote: >> Okay, so I have a Search class. And it looks really simple, >> >> Search::addDocument( $doc ) >> Search::find( $query ) >> Search::deleteAll() >> Search::deleteDocumentByField( $field, $value ) >> >> >> Everything works fine, I can add my custom document objects, find, >> delete all.. except for ::deleteDocumentByField(). So, without getting >> too detailed here is how I am trying to get it to work: >> >> My custom document object is simply Search_Document, which takes a >> Doctrine_Record and builds it's self ( fields ) based off the data >> types and properties. Nothing fancy, but if it would help here is the >> class: http://www.hashbin.com/5nl >> >> It works fine, the only important thing is that their is a constant: >> Search_Document::SEARCH_IDENTIFIER which holds the string of the UID >> to identify documents with later. Right now it builds this off of >> modelname.uniqueid. This works fine, right now it's suid and when I >> add a record (foo) I get foo.1 as the suid. >> >> I found on the mailing list a code snippet on how to find records on a >> uid and delete them and that is pretty much my deleteDocumentByField: >> >> public function deleteDocumentByField( $field, $value ) { >> >> $query = new Zend_Search_Lucene_Search_Query_Term(new >> Zend_Search_Lucene_Index_Term($value, $field)); >> >> $hits = $this->_index->find($query); >> >> $identifier = Search_Document::SEARCH_IDENTIFIER; >> >> foreach($hits as $hit) { >> >> Zend_Debug::dump($hit->getDocument()->$identifier); >> >> die(); >> >> } >> >> } >> >> >> and if I call: >> >> $searcher->deleteDocumentByField(Search_Document::SEARCH_IDENTIFIER, >> 'foo.1'); >> >> >> It doesn't match anything. If anyone has any guidance I would be most >> appreciative, I will post all 3 classes here if anyone does have the >> ability to give guidance or also uses Doctrine and wants to utilize >> this method. ( I have a Doctrine_Listener which on postInsert adds the >> record, postUpdate deletes the record and re adds it, and postDelete >> deletes the record. The postInsert is working, but postUpdate doesn't >> delete currently so everything you save the object you get another >> instance of the document in lucene. haha. Anyways thanks guys >> >> 1. Search.php <http://www.hashbin.com/5no> >> 2. Search/Document.php <http://www.hashbin.com/5np> >> 3. Search/Doctrine/Listener.php <http://www.hashbin.com/5nq> >> >> Thanks, >> Josh Team >> > >
