欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Apache Solr apachesolr 与Drupal-环境搭建 思路 有大用 有大大用 有大大大用 有大大大大用 有大大大大用

1)  /node-admin/13320  里面有schema.xml 一定要用这个 schema.xml 有大用

2)  /node-admin/13315  

3)  /node-admin/13303

4)  /node-admin/13304   在最后部分, admin/config/search/apachesolr/settings 发觉到 连不上 solr服务器

前面几点 里面涉及到的该启用的模块要启用 比如 Search Facets, Facet API(即facet) 模块

image.png

4) 打开 tomcat 页面,看看 solr服务器,可能会涉及 403, http://ip:8983  见   /node-admin/17054

image.png


5) 发觉 solr 无法启动,,可能是由于查 catalina.out  (/usr/local/tomcat/logs/catalina.out) 日志,可能是由于

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 的错,,见 /node-admin/17059  处理办法

查 catalina.out 日志 ,有可能还发现的错 , 见  /node-admin/17056  解决办法

我们重启下 (停止下,再启动下)

sudo -u tomcat /usr/local/tomcat/bin/shutdown.sh      #停止下                                                                

sudo -u tomcat /usr/local/tomcat/bin/startup.sh         #启动下


image.png


6)启动后 回到 3),看看能不能连 solr 服务器,由下图,连上了solr 服务器

image.png



7) 看看下面 关于分词 

/node-admin/13320  有大用

/node-admin/13319  有大用

/node-admin/13324  有大用

/node-admin/13325  有大用

/node-admin/13330  有大用

/node-admin/13326  有大用

/node-admin/13307  有大用

/node-admin/13318  有大用

/node-admin/13312  有大用

/node-admin/13329  有大用



8) 通过搜索发现 某人没有访问权限仍然搜到结果

image.png

9) 使用  hook_apachesolr_process_results 是不行的,因为它只能改变 results, 不能 改变 totals 总数,还是会出现分页

//function custom_one_apachesolr_process_results(&$results, $query){
//    $e = kprint_r($results,TRUE);
//    print $e;
//    $e = kprint_r($query,TRUE);
//    print $e;
//    foreach($results as $key=>$value){
//        if($value['entity_type'] == 'node' && !user_access('view any '.$value['bundle'].' content')){
//            unset($results[$key]);
//        }
//    }
//}

要使用 hook_apachesolr_query_alter

function custom_one_apachesolr_query_alter(DrupalSolrQueryInterface $query) {

   
$content_types = array_keys(node_type_get_types());//得到所有内容类型
   
foreach($content_types as $key=>$value){
       
if(!user_access('view any '.$value.' content')){ //没有访问此内容类型的权限,就把它从搜索中移除
           
$query->addFilter('bundle', $value, TRUE);
       }
   }
   //下面代码其实是有作用的
       //下是几行是排除某一个 id ,的搜索
        //    $nid = 11022;
      //    $exclude = TRUE;
      //    $filter = apachesolr_site_hash() . '/node/' . $nid;
     //    $query->addFilter('id', $filter, $exclude);
    //下面代码其实是有作用的
     //下面是 可以实现 某一个 分类 taxonomy term 的搜索
   //    $query->addFilter('tid', 16);

}


普通分类: