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

Reply via email to