Идеальный способ иметь дело с Solr приводит к PHP?

Firslty, я знаю о некоторых подобных вопросах вроде этого, но я думаю, что эта ситуация достаточно отличается для гарантирования ее собственного вопроса.

Я выполняю индекс Solr посредством гагатовой установки на сервере ЛАМПЫ. Я в настоящее время использую simplexml_load_file функция, чтобы ввести результаты поиска и затем проанализировать их канавка несколько функций. Я был доволен этим процессом, пока я не начал сталкиваться с фундаментальной проблемой.

Имена полей не становятся прошедшими функция simplexml. Например, этот результат;


  0.73325396
  Ravensbridge Drive
  0
  Stratstone Lotus Leicester
  
  1711765
  LE4 0BX
  LE4
  0

Будет похож на это в объекте simplexml;

 [doc] => Array
 (
   [0] => SimpleXMLElement Object
   (
     [float] => 0.73325396
     [str] => Array
     (
       [0] => Ravensbridge Drive
       [1] => 0
       [2] => Stratstone Lotus Leicester
       [3] => SimpleXMLElement Object
       (
         [@attributes] => Array
         (
           [name] => feed_id
         )
       )
       [4] => 1711765
       [5] => LE4 0BX
       [6] => LE4
       [7] => 0
     )
   )

Когда полный набор данных найден, существует 11 битов данных, хранивших в массиве, но когда некоторые отсутствуют, данные перемещаются, и мой синтаксический анализатор отклеивается.

Так, я посмотрел на библиотеки/классы, чтобы сделать это правильно. А именно, два основных; Apache Solr и solr-php-client, но оба кажутся по сложному с небольшим количеством фактических примеров реального мира, и ни один не похож, они поддерживают различные solr ядра, из которых я использую несколько.

Что состоит в том, чтобы использовать лучшая вещь? Я довольно придерживался здесь теперь, любая справка В ШИРОКОМ МАСШТАБЕ ценилась бы.

Спасибо!

5
задан hakre 24 June 2013 в 00:04
поделиться

1 ответ

Определенно, используйте один из существующих клиентов. Что касается поддержки нескольких ядер, это так же просто, как создать экземпляр клиента для каждого экземпляра Solr.

Расширение Solr намного мощнее, но при этом достаточно интуитивно понятно в использовании. Вот пара примеров фрагментов кода, которые делают базовый запрос и получают результаты, используя обе библиотеки:

PHP Solr extension

<?php
$options = array
(
    'hostname' => 'localhost',
    'port'     => '8080',
    'path'     => '/solr'
);

$client = new SolrClient($options);

$query = new SolrQuery();
$query->setQuery('fox');
$query->setStart(0);
$query->setRows(50);
// specify which fields do we want to retrieve
$query->addField('id')->addField('title_t')->addField('source_t');

$res = $client->query($query)->getResponse();

// how does he response look like?
var_dump($res);
/*
object(SolrObject)[4]
  public 'responseHeader' => 
    object(SolrObject)[5]
      public 'status' => int 0
      public 'QTime' => int 0
      public 'params' => 
        object(SolrObject)[6]
          public 'fl' => string 'id,title_t,source_t' (length=19)
          public 'indent' => string 'on' (length=2)
          public 'start' => string '0' (length=1)
          public 'q' => string 'fox' (length=3)
          public 'wt' => string 'xml' (length=3)
          public 'rows' => string '50' (length=2)
          public 'version' => string '2.2' (length=3)
  public 'response' => 
    object(SolrObject)[7]
      public 'numFound' => int 39
      public 'start' => int 0
      public 'docs' => 
        array
          0 => 
            object(SolrObject)[8]
              ...
          1 => 
            object(SolrObject)[9]
              ...
          2 => 
            object(SolrObject)[10]
              ...
          (...)
*/
// how does a document look like?
var_dump($res->reponse->docs[0]);
/*
object(SolrObject)[8]
  public 'id' => int 11408
  public 'source_t' => string 'CBD News Headlines' (length=18)
  public 'title_t' => string 'Hunting across Southeast Asia weakens forests' survival' (length=55)
*/

solr-php-client (официальный пример использования)

require_once 'library/SolrPhpClient/Apache/Solr/Service.php';

$solr = new Apache_Solr_Service('localhost', '8080', '/solr');

if (!$solr->ping()) {
    exit('Solr service not responding.');
}

$offset = 0;
$limit = 50;

$query = 'fox';
$res = $solr->search($query, $offset, $limit);

// how does he response look like?
var_dump($res->response);

/*
object(stdClass)[6]
  public 'numFound' => int 39
  public 'start' => int 0
  public 'docs' => 
    array
      0 => 
        object(Apache_Solr_Document)[46]
          protected '_documentBoost' => boolean false
          protected '_fields' => 
            array
              ...
          protected '_fieldBoosts' => 
            array
              ...
      1 => 
        object(Apache_Solr_Document)[47]
          protected '_documentBoost' => boolean false
          protected '_fields' => 
            array
              ...
          protected '_fieldBoosts' => 
            array
              ...
     (...)
*/

// how does a document look like?
var_dump($res->response->doc[0]);

/*
object(Apache_Solr_Document)[46]
  protected '_documentBoost' => boolean false
  protected '_fields' => 
    array
      'publicationTime_i' => int 1257724800
      'publicationDate_t' => string 'Mon, 9 Nov 2009' (length=15)
      'url_s' => string 'http://news.mongabay.com/2009/1108-hance_corlett.html' (length=53)
      'language_s' => string 'EN' (length=2)
      'title_t' => string 'Hunting across Southeast Asia weakens forests' survival' (length=55)
      'text' => string 'A large flying fox eats a fruit ingesting its seeds.' (length=52)
      'id' => int 11408
      'relevance_i' => int 27
      'source_t' => string 'CBD News Headlines' (length=18)
  protected '_fieldBoosts' => 
    array
      'publicationTime_i' => boolean false
      'publicationDate_t' => boolean false
      'url_s' => boolean false
      'language_s' => boolean false
      'title_t' => boolean false
      'text' => boolean false
      'id' => boolean false
      'relevance_i' => boolean false
      'source_t' => boolean false
*/
8
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: