SQL查询措辞中可以借助join关键字实现多表关联查询,可以借助like关键字对数据进行模糊查询,然而如果表中数据量特殊巨大(比如有亿万条数据),或者查询字段中数据特殊弘大(比如保存一篇文章)就不适宜利用like或join关键字进行查询,此时就须要借助诸如Solr这样的专业搜索引擎做事器进行查询。Solr是一个独立的、开源的、基于Lucene的Java企业级全文搜索引擎运用做事器。
如何搭建Solr
1、下载Solr,这里下载solr-6.6.0.zip:
2、安装JDK。把稳:Solr-6.6.0只能运行在1.8乃至更高版本的JDK环境中
3、解压solr-6.6.0.zip,这里解压到D盘Program_Files文件件,如下图:
解释:
a、bin:存放solr的运行脚本
b、contrib:存放扩展solr功能的插件
c、dist:存放solr jar包文件
d、docs:存放solr API文档
e、example:存放Solr大略示例
f、licenses:存放solr容许信息。
g、server:存放了一个Solr Web运用程序和一个发布该Web程序的Jetty做事器
4、Solr默认采取格林威治区时计时(这一点在Solr启动后,打开solr-6.6.0根目录\server\logs\ solr.log文件即可一览无余),可以通过如下操作进行修正:
a、Windows操作系统:利用Notepad++打开solr-6.6.0根目录\bin\solr.in.cmd配置文件;去掉50行REM并将值设为UTC+8(把稳不加双引号)。
b、Linux操作系统:利用Notepad++打开solr-6.6.0根目录\bin\solr.in.sh配置文件;去掉64行#号并将值设为\"大众UTC+8\公众。
5、创建存放所有Solr indexes索引文件(又称为cores核心文件)和配置文件的solr.home目录(这里在D盘根目录创建一个名solr_cores的文件夹),并将solr-6.6.0根目录\server\solr下的所有文件复制到该文件夹内,如下图:
解释:默认solr.home目录为solr-6.6.0根目录\server\solr
7、打开DOS窗口,将路径切换到solr-6.6.0根目录\bin目录,然后实行“solr start”命令启动Solr,涌现下图:
a、如果利用solr内置Jetty Web做事器发布其内置Web项目,则无法通过如下办法指定solr.home目录路径:去掉“solr-6.6.0根目录\server\solr-webapp\webapp\WEB-INF目录”下web.xml文件40~46行的注释;然后修正env-entry-value标签的值为solr.home目录路径——这种指定solr.home目录的办法在利用Tomcat发布Solr Web程序时才会利用。
b、Solr5.0以前的版本里面有独立的war供在诸如Tomcat Web做事器中发布,但从Solr5.0.0开始,Solr已不再供应独立的war,而是直策应用内置的Jetty Web做事器发布“solr-6.6.0根目录\server\solr-webapp\webapp”路径下的Web程序,详见:
c、可以通过实行solr stop -all命令停掉Solr。
8、打开浏览器,输入地址,涌现下图:
9、实行“solr create -c sirius”命令,此时在solr.home目录下会新建一个名为sirius的文件夹,该文件夹中conf和data子文件夹分别保存配置文件和索引文件,如下图所示:
10、修正上图conf文件夹schema.xml文件,添加Solr字段(类似于数据库中的字段):删掉124~128区间配置的field和copyField标签,将下面内容拷贝到123行:
<field name=\"大众name\公众 type=\公众text_general\"大众 indexed=\"大众true\"大众 stored=\"大众true\"大众/><!-- 书名 -->
<field name=\公众author\"大众 type=\"大众text_general\"大众 indexed=\"大众false\公众 stored=\公众true\"大众/><!-- 作者 -->
<field name=\"大众summary\"大众 type=\公众text_general\"大众 indexed=\公众true\公众 stored=\"大众true\"大众/><!-- 简介 -->
<field name=\"大众price\"大众 type=\"大众float\公众 indexed=\"大众false\公众 stored=\公众true\"大众/><!-- 价格 -->
<field name=\公众createTime\"大众 type=\"大众date\"大众 indexed=\"大众false\"大众 stored=\公众true\公众/><!-- 数据创建韶光 -->
<field name=\公众keywords\"大众 type=\"大众text_general\公众 indexed=\公众true\"大众 stored=\公众false\"大众 multiValued=\"大众true\"大众 />
<!-- 按keywords列查询时实际是查找name或summary中符合查询条件的数据 -->
<copyField source=\"大众name\公众 dest=\"大众keywords\"大众 />
<copyField source=\"大众summary\公众 dest=\"大众keywords\"大众 />解释:
a、name为\"大众_version_\"大众和name为\"大众_text_\"大众的field标签不能删除;
11、Solr操作数据:
a、将数据导入Solr索引库:可以通过Java代码或为Solr配置数据源的办法将数据导入Solr索引库。
Java代码将数据导入Solr索引库
import java.util.Date;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
public class Test {
public static void main(String[] args) throws Exception {
final String SOLR_CORE = \"大众sirius\公众;//solr home内选择详细的某个solr core
final String SOLR_URL = \"大众http://localhost:8983/solr/\"大众;//solr 做事器地址
SolrInputDocument solrInputDocument = new SolrInputDocument();
//往solrInputDocument中添加字段,所添加的字段必须是Solr managed-schema文件中所定义的
solrInputDocument.addField(\"大众id\公众, \"大众00000000-0000-0000-0000-000000000004\"大众);//主键
solrInputDocument.addField(\"大众name\"大众, \公众朝花夕拾\"大众);//书名
solrInputDocument.addField(\"大众author\"大众, \"大众鲁迅\公众);//作者
solrInputDocument.addField(\"大众summary\公众, \"大众本书采取夹叙夹议的方法,以青少年时期的生活经历为线索,真实生动地叙写了自己从屯子到城镇,从家庭到社会,从海内到国外的一组生活经历,抒发了对往昔亲友和师长的怀念之情,同时也对旧势力、旧文化进行了嘲讽和鞭笞。\"大众);//简介
solrInputDocument.addField(\"大众price\公众, 23.9);//价格
solrInputDocument.addField(\公众createTime\"大众, new Date());//数据创建韶光
HttpSolrClient httpSolrClient = new HttpSolrClient.Builder(SOLR_URL + SOLR_CORE).build();
httpSolrClient.add(solrInputDocument);//向Solr索引库添加数据
httpSolrClient.commit();
httpSolrClient.close();
}
}
为Solr配置数据源将数据导入Solr索引库
a、配置数据库映射:在D:\solr_cores\sirius\conf目录创建一个名为data-config.xml的文件,写入如下代码:
<dataConfig>
<script>
<![CDATA[
function startDateTransform(row){
// Get the timestamp and convert it to a date,把稳:必须将createTime全部大写
var dateVal = row.get(\"大众CREATETIME\公众).dateValue();
// Put the correct date object into the original column,把稳:必须将createTime全部大写
row.put(\公众CREATETIME\"大众, dateVal);
return row;
}
]]>
</script>
<dataSource
name=\"大众oracle_db\"大众 type=\公众JdbcDataSource\"大众
driver=\"大众oracle.jdbc.driver.OracleDriver\"大众
url=\公众jdbc:oracle:thin:@192.168.30.212:1521:keeper\"大众
user=\"大众scott\"大众 password=\"大众root\公众/>
<document name=\"大众book\"大众>
<entity
name=\公众book\"大众 pk=\"大众id\"大众 dataSource=\"大众oracle_db\公众
query=\公众select id, name, price, author, summary, cast(create_time as timestamp) as createTime from book\"大众
transformer=\"大众script:startDateTransform\"大众>
<field column=\"大众id\公众 name=\公众id\公众/>
<field column=\"大众name\"大众 name=\公众name\"大众/>
<field column=\"大众price\"大众 name=\"大众price\"大众/>
<field column=\"大众author\"大众 name=\"大众author\"大众/>
<field column=\"大众summary\公众 name=\"大众summary\"大众/>
<field column=\"大众createTime\"大众 name=\公众createTime\"大众/>
</entity>
</document>
</dataConfig>
b、将数据库映射文件关联到D:\solr_cores\sirius\conf目录solrconfig.xml文件:
①、在74行表明下面添加<lib dir=\公众${solr.install.dir:../../../..}/dist/\"大众 regex=\"大众solr-dataimporthandler-.\.jar\"大众 />,即添加DIH jar包依赖
②、在solrconfig.xml文件858行添加如下内容:
<requestHandler name=\公众/dataimport\"大众 class=\"大众solr.DataImportHandler\"大众>
<lst name=\"大众defaults\"大众>
<str name=\"大众config\"大众>data-config.xml</str>
</lst>
</requestHandler>
c、将oracle数据库驱动jar包拷贝到“solr-6.6.0根目录\server\solr-webapp\webapp\WEB-INF\lib”目录。
d、重启Solr,打开浏览器,按步骤进行如下操作:
e、按步骤进行如下操作即可查询所有数据:
q:查询的关键字,此参数最为主要,例如name:传 AND summary:本(即查询书名中含有“传”字且简介中含有“本”字的书本信息,把稳:AND或OR不能小写,必须大写),默认为:(即查询所有数据)
fq:(filter query)过虑查询,供应一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:price:[15.0 TO 20.0]表示查询price在15.0~20.0的所有书本。
sort:排序办法,例如price desc表示按照price降序
start:指定从第几条记录开始返回结果,默认从0开始,一样平常用于分页
rows:指定返回结果最多有多少条记录,默认值为 10,与start一起利用以实现分页
fl:指定返回哪些字段,用逗号或空格分隔,把稳:字段区分大小写,例如id,name,price,author,createTime
df:默认的查询字段,一样平常默认指定
wt:(writer type)指定输出格式,有 xml, json, php等