SQL查询措辞中可以借助join关键字实现多表关联查询,可以借助like关键字对数据进行模糊查询,然而如果表中数据量特殊巨大(比如有亿万条数据),或者查询字段中数据特殊弘大(比如保存一篇文章)就不适宜利用like或join关键字进行查询,此时就须要借助诸如Solr这样的专业搜索引擎做事器进行查询。
Solr是一个独立的、开源的、基于Lucene的Java企业级全文搜索引擎运用做事器。

如何搭建Solr

1、下载Solr,这里下载solr-6.6.0.zip:

phpsolr扩展初识solr技巧 jQuery

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包拷贝到&ldquo;solr-6.6.0根目录\server\solr-webapp\webapp\WEB-INF\lib&rdquo;目录。

d、重启Solr,打开浏览器,按步骤进行如下操作:

e、按步骤进行如下操作即可查询所有数据:

q:查询的关键字,此参数最为主要,例如name:传 AND summary:本(即查询书名中含有&ldquo;传&rdquo;字且简介中含有&ldquo;本&rdquo;字的书本信息,把稳: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等