当前位置: 首页 > 面试题库 >

Elastic search和Codeigniter(PHP)

郎鸿雪
2023-03-14
问题内容

我正在尝试将ElasticSearch与Codeigniter框架一起使用。

我所做的只是安装ElasticSearch,然后将网上找到的一个很好的PHP库(:P)复制到CI库:

    class Elasticsearch {

  public $config_file = 'elasticsearch';
  public $index;

  function __construct($index = false){
      $CI =& get_instance();
      $CI->config->load($this->config_file);
      $this->server = $CI->config->item('es_server');

  }

  function call($path, $http = array()){
    if (!$this->index) throw new Exception('$this->index needs a value');
    return json_decode(file_get_contents($this->server . '/' . $this->index . '/' . $path, NULL, stream_context_create(array('http' => $http))));
  }

  //curl -X PUT http://localhost:9200/{INDEX}/
  function create(){
     $this->call(NULL, array('method' => 'PUT'));
  }

  //curl -X DELETE http://localhost:9200/{INDEX}/
  function drop(){
     $this->call(NULL, array('method' => 'DELETE'));
  }

  //curl -X GET http://localhost:9200/{INDEX}/_status
  function status(){
    return $this->call('_status');
  }

  //curl -X GET http://localhost:9200/{INDEX}/{TYPE}/_count -d {matchAll:{}}
  function count($type){
    return $this->call($type . '/_count', array('method' => 'GET', 'content' => '{ matchAll:{} }'));
  }

  //curl -X PUT http://localhost:9200/{INDEX}/{TYPE}/_mapping -d ...
  function map($type, $data){
    return $this->call($type . '/_mapping', array('method' => 'PUT', 'content' => $data));
  }

  //curl -X PUT http://localhost:9200/{INDEX}/{TYPE}/{ID} -d ...
  function add($type, $id, $data){
   echo  $this->call($type . '/' . $id, array('method' => 'PUT', 'content' => $data));
  }

  //curl -X GET http://localhost:9200/{INDEX}/{TYPE}/_search?q= ...
  function query($type, $q){
    return $this->call($type . '/_search?' . http_build_query(array('q' => $q)));
  }
}

然后我尝试创建索引并简单地检索它们:

$this->load->library('elasticsearch');
                 $this->elasticsearch->index = 'comments';
                 $this->elasticsearch->create();
                 $data = '{author:jhon,datetime:2001-09-09 00:02:04}';
                 $this->elasticsearch->add($type ='details',$id = '1',$data);

当我运行此代码时,它向我显示错误:

A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://localhost:9200/comments/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

Filename: libraries/Elasticsearch.php

Line Number: 19
A PHP Error was encountered

Severity: Notice

Message: file_get_contents() [function.file-get-contents]: Content-type not specified assuming application/x-www-form-urlencoded

Filename: libraries/Elasticsearch.php

Line Number: 19
A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://localhost:9200/comments/details/1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

Filename: libraries/Elasticsearch.php

Line Number: 19

我误会/错过了什么吗?抱歉,但是我是elasticsearch的新手,并且还使用了PHP:P

因为如果我去:

http://localhost:9200/comments/details/1

//it prints in window
 {"_index":"comments","_type":"details","_id":"1","exists":false}

问题答案:

我不太确定,但我想可能是您致电给add()

$this->elasticsearch->add($type ='details',$id = '1',$data);

您不想在这里设置值。我认为您会在HTTP错误请求之前收到php错误,但我会首先尝试这样做:

$this->elasticsearch->add('details','1',$data);

您的add()方法已经知道参数代表什么,因此您只需要传递详细信息即可。

看来您的json格式可能不正确。

// change
$data = '{author:jhon,datetime:2001-09-09 00:02:04}';

// to
$data = '{author:"jhon",datetime:2001-09-09 00:02:04}';


 类似资料:
  • 问题内容: 我正在使用CodeIgniter编写的现有站点上工作,我们正在考虑将AngularJS用于需要大量前端功能的某些页面,但我们不想替换所有CodeIgniter视图(一次(尚未))。 因此,我单击了由angular的路由器控制的链接,该链接由javascript处理,但下一个链接可能是应由CodeIgniter框架处理的“正常”请求。 有两种结合这两种方法的优雅方法吗?我真的不介意一些额

  • 我在CI和Typeahead方面有一些问题,我没有得到任何结果/ JS CI控制器 CI模型 和视图 有人能帮我解决这个问题吗?

  • 安装CodeIgniter非常容易。 只需按照以下步骤操作 - Step-1 - 从CodeIgniter链接下载CodeIgniter 遗产和最新版本有两种不同的选择。 名称本身是自我描述性的。 旧版本的版本低于2.x,最新版本为3.0版本。 我们也可以使用GitHub并获取所有最新的脚本.. Step-2 - 解压缩文件夹。 Step-3 - 将所有文件和文件夹上传到您的服务器。 Step-4

  • 问题内容: 我们正在考虑从Solr / Solr.net切换到Elasticsearch。我们从NEST开始。我们的搜索索引中只有4个文档。 上面的代码大约需要 250毫秒,而同样的代码,并采取30-45ms。250毫秒对于4个文档来说是太多时间。 NEST可以在高流量新闻网站上使用,还是您推荐+ 组合?搜索页面是2013年我们网站上访问量最大的页面。 提前致谢。 问题答案: 为了使NEST发出第

  • 我试图使用Spring数据Elasticsearch连接到Elasticsearch 5。 根据链接-https://github.com/spring-projects/spring-data-elasticsearch,spring数据弹性搜索-3.0.0。M4与Elasticsearch 5.4.0兼容 但我在尝试连接Elasticsearch时出现以下错误 请告诉我,如果你们中的任何一个人

  • CodeIgniter 是一个简单快速的PHP MVC 框架。EllisLab 的工作人员发布了 CodeIgniter。许多企业尝试体验过所有 PHP MVC 框架之后,CodeIgniter 都成为赢家,主要是由于它为组织提供了足够的自由支持,允许开发人员更迅速地工作。 自由意味着使用 CodeIgniter 时,您不必以某种方式命名数据库表,也不必根据表命名模型。这使 CodeIgniter