BxElsModule.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup ElasticSearch ElasticSearch
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. class BxElsModule extends BxBaseModGeneralModule
  12. {
  13. protected $_oApi;
  14. function __construct(&$aModule)
  15. {
  16. parent::__construct($aModule);
  17. bx_import('Api', $aModule);
  18. $this->_oApi = new BxElsApi();
  19. }
  20. public function actionDebug()
  21. {
  22. bx_import('Api', $this->_aModule);
  23. $o = new BxElsApi();
  24. // search all
  25. // $mixed = $o->api('/testdata/_search?q=*');
  26. // $mixed = $o->api('/testdata/_search', ['query' => ['match_all' => (object)[]]]);
  27. // search for the term
  28. // $mixed = $o->api('/testdata/_search', ['query' => ['simple_query_string' => ['query' => 'palm']]]);
  29. // $mixed = $o->api('/testdata/_search?q=palm');
  30. // search in a field
  31. // $mixed = $o->api('/testdata/_search', ['query' => ['simple_query_string' => ['query' => 'palm', 'fields' => ['name']]]]);
  32. // delete indexed doc
  33. // $mixed = $o->api('/testdata/trees/23', [], 'delete');
  34. // get indexed doc
  35. // $mixed = $o->api('/testdata/trees/23');
  36. // index a doc
  37. // $mixed = $o->indexData('testdata', 'trees', 23, ['name' => 'apple tree', 'fruits' => 'apples']);
  38. // $mixed = $o->indexData('testdata', 'trees', 24, ['name' => 'palm', 'fruits' => 'coconuts']);
  39. // get indexes
  40. // $mixed = $o->api('/_cat/indices');
  41. // add index
  42. // $mixed = $o->api('/testdata', [], 'PUT');
  43. // test
  44. $mixed = $o->api('/_cat/health');
  45. echo '<pre>';
  46. if (null === $mixed)
  47. echo $o->getErrorMsg();
  48. else
  49. var_dump($mixed);
  50. echo '</pre>';
  51. }
  52. public function serviceSearch($sTerm, $sType = '', $sIndex = '')
  53. {
  54. if(empty($sIndex))
  55. $sIndex = $this->_oConfig->getIndex();
  56. $mixedResult = $this->_oApi->searchData($sIndex, $sType, $sTerm);
  57. if(!$mixedResult || !is_array($mixedResult))
  58. return false;
  59. return $mixedResult['hits'];
  60. }
  61. public function serviceGet($iContentId, $sType, $sIndex = '')
  62. {
  63. if(empty($sIndex))
  64. $sIndex = $this->_oConfig->getIndex();
  65. return $this->_oApi->getData($sIndex, $sType, $iContentId);
  66. }
  67. public function serviceAdd($iContentId, $mixedContenInfo)
  68. {
  69. if(is_array($mixedContenInfo)) {
  70. $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContenInfo['alert_type']);
  71. $mixedContenInfo = BxDolContentInfo::$sMethod($mixedContenInfo['unit'], $mixedContenInfo['action']);
  72. }
  73. if(!($mixedContenInfo instanceof BxDolContentInfo))
  74. return false;
  75. $CNF = &$this->_oConfig->CNF;
  76. $aInfo = array(
  77. $CNF['FIELD_AUTHOR'] => $mixedContenInfo->getContentAuthor($iContentId),
  78. $CNF['FIELD_ADDED'] => $mixedContenInfo->getContentDateAdded($iContentId),
  79. $CNF['FIELD_CHANGED'] => $mixedContenInfo->getContentDateChanged($iContentId),
  80. $CNF['FIELD_LINK'] => $mixedContenInfo->getContentLink($iContentId),
  81. $CNF['FIELD_TITLE'] => $mixedContenInfo->getContentTitle($iContentId),
  82. $CNF['FIELD_TEXT'] => $mixedContenInfo->getContentText($iContentId),
  83. );
  84. $aInfo = array_merge($aInfo, $mixedContenInfo->getContentInfo($iContentId));
  85. $mixedResult = $this->_oApi->indexData($this->_oConfig->getIndex(), $mixedContenInfo->getName(), $iContentId, $aInfo);
  86. if($mixedResult === null)
  87. return false;
  88. return $mixedResult['result'] == 'created';
  89. }
  90. public function serviceUpdate($iContentId, $mixedContenInfo)
  91. {
  92. if(is_array($mixedContenInfo)) {
  93. $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContenInfo['alert_type']);
  94. $mixedContenInfo = BxDolContentInfo::$sMethod($mixedContenInfo['unit'], $mixedContenInfo['action']);
  95. }
  96. if(!($mixedContenInfo instanceof BxDolContentInfo))
  97. return false;
  98. $CNF = &$this->_oConfig->CNF;
  99. $aInfo = array(
  100. $CNF['FIELD_AUTHOR'] => $mixedContenInfo->getContentAuthor($iContentId),
  101. $CNF['FIELD_ADDED'] => $mixedContenInfo->getContentDateAdded($iContentId),
  102. $CNF['FIELD_CHANGED'] => $mixedContenInfo->getContentDateChanged($iContentId),
  103. $CNF['FIELD_LINK'] => $mixedContenInfo->getContentLink($iContentId),
  104. $CNF['FIELD_TITLE'] => $mixedContenInfo->getContentTitle($iContentId),
  105. $CNF['FIELD_TEXT'] => $mixedContenInfo->getContentText($iContentId),
  106. );
  107. $aInfo = array_merge($aInfo, $mixedContenInfo->getContentInfo($iContentId));
  108. $mixedResult = $this->_oApi->updateData($this->_oConfig->getIndex(), $mixedContenInfo->getName(), $iContentId, $aInfo);
  109. if($mixedResult === null)
  110. return false;
  111. return $mixedResult['result'] == 'updated';
  112. }
  113. public function serviceDelete($iContentId, $mixedContenInfo)
  114. {
  115. if(is_array($mixedContenInfo)) {
  116. $sMethod = 'getObjectInstanceByAlert' . bx_gen_method_name($mixedContenInfo['alert_type']);
  117. $mixedContenInfo = BxDolContentInfo::$sMethod($mixedContenInfo['unit'], $mixedContenInfo['action']);
  118. }
  119. if(!($mixedContenInfo instanceof BxDolContentInfo))
  120. return false;
  121. $CNF = &$this->_oConfig->CNF;
  122. bx_import('Api', $this->_aModule);
  123. $oApi = new BxElsApi();
  124. $mixedResult = $oApi->deleteData($this->_oConfig->getIndex(), $mixedContenInfo->getName(), $iContentId);
  125. if($mixedResult === null)
  126. return false;
  127. return $mixedResult['result'] == 'deleted';
  128. }
  129. }
  130. /** @} */