Joomla 上的智能搜索插件:没有结果

Posted

技术标签:

【中文标题】Joomla 上的智能搜索插件:没有结果【英文标题】:Plug-in for Smart Search on Joomla: no results 【发布时间】:2013-11-18 12:15:06 【问题描述】:

我正在为我的组件编写插件。对于这个组件,我有一个表“#__radiocatalog_item”,其中包含idnamedescription 列,我需要查找列name。为此,我编写了这个插件:

<?php

defined('JPATH_BASE') or die;

require_once JPATH_ADMINISTRATOR.'/components/com_finder/helpers/indexer/adapter.php';

class PlgFinderRadioitem extends FinderIndexerAdapter

   protected $context = 'Radioitem';
   protected $extension = 'com_radiocatalog';
   protected $layout = 'item';
   protected $type_title = 'item';
   protected $table = '#__radiocatalog_item';
   protected $state_field = 'parent';
   protected $autoloadLanguage = true;

   protected function setup()
        
           return true;
        


   public function onFinderDelete($context, $table)
   
      if ($context == 'com_radiocatalog.item')
      
         $id = $table->id;
      
      elseif ($context == 'com_finder.index')
      
         $id = $table->id;
      
      else
      
         return true;
      

      return $this->remove($id);
   

   public function onFinderChangeState($context, $pks, $value)
   
      if ($context == 'com_radiocatalog.item')
      
         $this->itemStateChange($pks, $value);
      

      if ($context == 'com_plugins.plugin' && $value === 0)
      
         $this->pluginDisable($pks);
      
   

   protected function index(FinderIndexerResult $item, $format = 'html')
   
      if (JComponentHelper::isEnabled($this->extension) == false)
      
         return;
      

      $item->url = $this->getURL($item->id, 'com_radiocatalog&layout=item', $this->layout);
      $item->route = 'index.php?option=com_radiocatalog&view=item&layout=item&id='.$item->id;
      $item->addTaxonomy('Type', 'Radioitems');
      $item->addTaxonomy('Language', $item->language);
      $this->indexer->index($item);      
   

   protected function getListQuery($sql = null)
   
      $db = JFactory::getDbo();
      $sql = $sql instanceof JDatabaseQuery ? $sql : $db->getQuery(true);
      $sql->select('a.id as id, a.name as title, a.description as description');
      $sql->from('#__radiocatalog_item AS a');

      return $sql;
   

   protected function getStateQuery()
   
      $sql = $this->db->getQuery(true);
      $sql->select($this->db->quoteName('a.id'));
      $sql->select($this->db->quoteName('a.name').' as title');
      $sql->from($this->db->quoteName('#__radiocatalog_item') . ' AS a');
      return $sql;
   

?>

完全索引后,网站上的搜索不起作用。

【问题讨论】:

两个问题:1. Joomla 的版本和 2. 索引和搜索后会发生什么?您看到任何错误吗? 我发现你不太可能有一个名为 parent 的状态字段。 @cppl 1. Joomla 3.2.0; 2. 没有可见的错误; @Elin 这个变量没有被使用:) 智能搜索肯定会使用该变量。 【参考方案1】:

我也在为同样的问题而苦苦挣扎。所以我启用了 Joomla 调试 Global Configuration / System / Debug System = true 并尝试使用公共站点 SmartSearch 模块搜索术语“myterm”。然后我检查了执行的 SQL 查询。首先,找到了这个词:

SELECT t.term, t.term_id
FROM j_finder_terms AS t
WHERE t.term = 'myterm' 
AND t.phrase = 0

ID=653(稍后使用):

SELECT l.link_id,m.weight AS ordering
FROM `j_finder_links` AS l
INNER JOIN `j_finder_links_terms2` AS m 
ON m.link_id = l.link_id
WHERE l.access IN (1,1) 
AND l.state = 1 
AND (l.publish_start_date = '0000-00-00 00:00:00' OR l.publish_end_date <= '2014-01-04 17:34:00') 
AND (l.publish_end_date = '0000-00-00 00:00:00' OR l.publish_end_date >= '2014-01-04 17:34:00') 
AND m.term_id IN (653)

但是这个查询没有返回任何结果,因为 j_finder_links.access 和 j_finder_links.state 的值被设置为 0 而不是 1。

所以我建议您检查查询,如果您有同样的问题,请尝试从 getStateQuery() 方法更改您的查询,或在 getListQuery() 查询中选择“1 AS 访问,1 AS 状态”并保留 $ state_field 变量未设置。

抱歉,我的解释含糊不清,我不太了解 SmartSearch 的工作原理,我只是想让它以某种方式与我的组件一起工作。

【讨论】:

以上是关于Joomla 上的智能搜索插件:没有结果的主要内容,如果未能解决你的问题,请参考以下文章

在 Joomla! 中搜索 created_by_alias 字段!内容

《搜索结果 网络搜索结果 蚂蚁金服张天翼蚂蚁金服智能风控引擎AlphaRisk介绍》

加一度解析百度搜索困局,小程序将开启搜索流量新机遇

商品搜索——输入联想|智能提示探索

智能开放搜索上线定制分词器

分享一些 Windows 平台上的神器