php - 在 PHP 中处理 Solr 结果的理想方式?

标签 php solr simplexml

首先,我知道一些与此类似的问题,但我认为这种情况的不同足以引起它自己的问题。

我正在通过 LAMP 服务器上的码头安装运行 Solr 索引。我目前使用 simplexml_load_file 函数来引入搜索结果,然后通过几个函数解析它们。在我开始遇到一个基本问题之前,我对这个过程很满意。

字段名称不会通过 simplexml 函数传递。比如这个结果;

<doc>
  <float name="score">0.73325396</float>
  <str name="add1">Ravensbridge Drive</str>
  <str name="comments">0</str>
  <str name="company">Stratstone Lotus Leicester</str>
  <str name="feed_id"/>
  <str name="id">1711765</str>
  <str name="pcode">LE4 0BX</str>
  <str name="psearch">LE4</str>
  <str name="rating">0</str>
</doc>

在 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 Solrsolr-php-client但两者似乎都过于复杂,几乎没有实际示例,而且它们看起来都不像支持不同的 solr 核心,我使用了其中的几个。

最好用什么?我现在被困在这里,非常感谢任何帮助。

谢谢!

最佳答案

当然,使用现有客户端之一。至于多核支持,就像为每个 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 ( official example of use )

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

关于php - 在 PHP 中处理 Solr 结果的理想方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973780/

相关文章:

PHP:如何让 <br/> 在 simplexml_load_file() var 中工作

php - SQL查询显示当前时间之前的小时

php - AzurePHP : Uploading to a Blob with a Dialogue?

javascript - 当有人进行更改时自动刷新页面

search - SOLR 中的 EdgeNGramTokenizerFactory EdgeNGramFilterFactory 有什么区别?

php - 当我在 php 中尝试 Solr 时出现问题

php - Json未定义错误

solr - SOLR 可以执行 UPSERT 吗?

php - 从 URL 获取 xml 到变量

php - simplexml_load_string 不解析我的 XML 字符串。字符集问题?