简介
- Solr是Apache下的开源项目,是一个全文搜索服务器,采用Java开发,基于Lucene这一开源全文检索引擎工具包。
- Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
安装solr7.3
安装jdk
- solr7需要jdk1.8以上。
- 安装步骤参考:https://blog.csdn.net/qq_40369829/article/details/79900135
安装并启动solr7.3
- 下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr/7.3.0
- 解压到/usr/local并重命名。
sudo tar -zxvf solr-7.3.0.tgz -C /usr/local
sudo mv /usr/local/solr-7.3.0 /usr/local/solr7
- 从bin下启动solr服务器。
sudo su
/usr/local/solr7/bin/solr start -force
- 浏览器中访问http://{host}:8983/solr/。
配置solr7
导入依赖jar包
- 中文分词器相关:lucene-analyzers-smartcn.jar。
cd /usr/local/solr7/contrib/analysis-extras/lucene-libs/
sudo cp lucene-analyzers-smartcn-7.3.0.jar /usr/local/solr7/server/solr-webapp/webapp/WEB-INF/lib
- 数据库导入相关:solr-dataimporthandler.*.jar和mysql驱动。
cd /usr/local/solr7/dist/
sudo cp solr-dataimporthandler-*.jar /usr/local/solr7/server/solr-webapp/webapp/WEB-INF/lib
cd ~
sudo cp mysql-connector-java-5.1.46.jar /usr/local/solr7/server/solr-webapp/webapp/WEB-INF/lib
solr core 模板
- 使用configsets下参考的配置,命名为mycollection。
cd /usr/local/solr7/server/solr/configsets
sudo cp -r sample_techproducts_configs mycollection
配置业务字段
- managed-schema中配置solr中的域,包括名称,类型等。
- TextField类需要使用分词器。
cd mycollection/conf
sudo gedit managed-schema
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="plong" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>
- indexed字段表示document可以通过该field搜索。
- stored字段表示搜索的document中是否显示该field。
- managed-scheme和solrconfig.xml详解,field说明
配置数据导入文件
- solrconfig.xml中添加存放导入数据配置文件data-config.xml的位置。
sudo gedit solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
- 创建data-config.xml,包括数据库相关信息,sql语句,查询列名和solr中的域名对应关系。
sudo gedit data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.84.1:3306/taotao" user="root" password="root" batchSize="-1" />
<document>
<entity name="items"
query="SELECT a.id,a.title,a.price,a.sell_point,a.image,b.name category_name,c.item_desc
FROM tb_item a
LEFT JOIN tb_item_cat b ON a.cid = b.id
LEFT JOIN tb_item_desc c ON a.id = c.item_id"
deltaQuery="select id from tb_item where created > '${dataimporter.last_index_time}'">
<field column="title" name="item_title" />
<field column="sell_point" name="item_sell_point" />
<field column="price" name="item_price" />
<field column="image" name="item_image" />
<field column="category_name" name="item_category_name" />
<field column="item_desc" name="item_desc" />
</entity>
</document>
</dataConfig>
使用solr7
添加core
- 重新启动solr服务器。
sudo su
/usr/local/solr7/bin/solr restart -force
- 页面上添加core,注意配置文件的位置。
导入和查询数据
- 导入数据。
- 查询数据。
索引的维护
- 维护数据,可以使用多种数据格式,页面提交或者调用/update接口。
- 添加数据:
<add>
<doc>
<field name="id">test001</field>
<field name="item_title">测试商品1</field>
<field name="item_price">12345</field>
</doc>
<doc>
<field name="id">test002</field>
<field name="item_title">测试商品2</field>
<field name="item_price">54321</field>
</doc>
</add>
<commit/>
- 删除数据:
- 使用主键删除。
- 使用查询删除。
<delete>
<id>xxx</id>
</delete>
<commit/>
<delete>
<query>*:*</query>
</delete>
<commit/>
- 重建索引:
<optimize/>
相关问题
- solr7不能配置环境变量,否则会报缺少solr.xml错误。
- solr7中的域没有long类型,使用 plong 代替。
- 连接远程的Mysql可能被拒绝,因为数据库的root权限一般只能本地登录。需要添加远程的root权限。
Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES)