2016-03-31 3 views
1

Я новичок в Solr и я использую эту тему, чтобы сделать атомное обновленияPHP Solr атомного обновление

How do I update a document in Solr PHP?

В основном им делать запрос MySQL затем обновить документ на Solr

Вопрос: Как сделать атомное обновление, где конкретное поле соответствует полю должно быть согласовано внутри, если заявление, как это:

if(solr(username.field) == 'john')) 
{ 
    //execute atomic update 
} 

до сих пор мой код грязен, как эти:

$query = "SELECT * from User"; 

    $options = array 
    (
     'hostname' => SOLR_SERVER_HOSTNAME, 
     'login' => SOLR_SERVER_USERNAME, 
     'password' => SOLR_SERVER_PASSWORD, 
     'port'  => SOLR_SERVER_PORT, 
     'path'  => SOLR_SERVER_PATH, 
    ); 

    $result = $mysqli->query($query); 
    if($result->num_rows > 0) 
    { 
     while($row=mysqli_fetch_assoc($result)) 
     { 

      $querySearch = '+username:*'; //query all user that is on solr 
      $query  = new SolrQuery(); 
      $query->setQuery($querySearch); 
      $query->setStart(0); 
      $query->setRows(10000); 
      $client    = new SolrClient($options); 
      $query_response  = $client->query($query);    
      $query_response->setParseMode(SolrQueryResponse::PARSE_SOLR_DOC); 
      $response = $query_response->getResponse(); 
      $doc = new SolrInputDocument(); 
      $counter = $response->response->numFound; 
      for($x = 0; $x < $counter; $x++) 
      { 
       $doc = $response->response->docs[$x]->getInputDocument(); //this gets the old value (refer to thread) 
       $docs = $query_response->getResponse()->response->docs[$x]->username->values; //how I get the value of users 

       $second_doc = new SolrInputDocument(); 

       if($docs == get_product($row['USERNAME'])) 
       { 
        $second_doc->addField('points', $row['POINTS']); //this suppose to update my solr document with those username found 
       } 
       else 
       { 
        $second_doc->addField('points', "0"); 
       } 
        $second_doc->merge($doc); 
        $updateResponse = $client->addDocument($second_doc); 
        $client->commit(); 
      }  
     } 

ответ

0

Это должно было

if(!empty($response->response->docs[$x]->username->values[$x]) == get_product($row['USERNAME'])) 
{ 
    $doc = $response->response->docs[$x]->getInputDocument(); 
    $second_doc->addField('point', $row['POINT']); 
} 
else 
{ 
    //do other update here 
} 

//$response->response->docs[$x]->username->values[$x] => get the usernames in the document 
Смежные вопросы