这篇文章主要是关于solr和普通用户之间的桥梁SearchService,简单了解下整过工作流程.

为何要在Solr和用户之间加一层?

因为solr提供了url方式(REST风格)的API来进行增删改查,因此如果不加安全策略,别人在查询的同时可以修改你的数据,这是绝对不允许的。但是把solr的服务端口开放然后加安全策略的方式是不科学的,这个安全策略难以配置,并且漏洞很多,所以我们通过建立一个独立的web服务器来提供对外服务,solr服务器只对内网开放,这样就比较安全并容易控制。

在这里,我不直接提供传统意义上的web服务,而是采用WebService的模式,参照REST风格风格提供API服务。优点是可以应对各种不同平台。

这样做的另一个好处是能轻松应对SolrCloud的扩展和并发量的剧增,如果后期并发增加,可以扩展SearchService到多台web服务器,然后通过nginx做反向代理和负载均衡,将客户端的请求分散到不同的web服务器上。

用Servlet提供服务

1
2
3
4
5
6
7
8
dependencies {   
  testCompile group: 'junit', name: 'junit', version: '4.11' 
  testCompile 'org.slf4j:slf4j-simple:1.7.20'
  providedCompile 'javax.servlet:javax.servlet-api:3.0.1'  
  compile 'org.apache.solr:solr-solrj:5.5.0'  
  compile 'com.google.code.gson:gson:2.6.2' 
  compile 'com.squareup.okhttp:okhttp:2.7.5'
  }

定义API参数

|参数|意义(取值范围)|默认值| |