Solr 初步理解
打开:
在D:\solr-7.7.2\bin目录下输入(cmd)
solr start
在浏览器中输入网址localhost:8983/solr
注意:
端口号:8983
窗口不要关闭
创建:
如果出现错误------------->
在文件夹中复制conf到创建的文件(new_core)**
注意路径
将mysql-connection-java-5.16.jar放到new-core文件夹下的lib文件中
在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(在当前文件夹下,与solrconfig.xml同级)
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/ssm"
user="root"
password="root"/>
<document>
<entity name="product" query="SELECT * FROM user">
<field column="id" name="u_id" />
<field column="name" name="name" />
<field column="password" name="password" />
</entity>
</document>
</dataConfig>
修改managed-schema文件
<field name="name" type="string" indexed="false" stored="false"/>
<field name="password" type="string" indexed="false" stored="false"/>
导入
导入时注意要选中clear ,多次刷新不会重复出现
查询
增量更新
重新导入
- 修改数据库
给数据表添加字段updatetime(如果有就不需要),数据类型为(timestamp) 执行语句
alter table `user` modify updateTime timestamp default current_timestamp on update current_timestamp;
- 添加jar包
在D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib目录下添加solr-dataimport-scheduler.jar
- 添加配置文件
在文件下创建conf文件夹(注意目录),在文件夹中创建dataimport.properties文件,文件中输入下列内容
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
syncCores=new_core(实例名称)
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost(IP地址)
# solr server port
# [defaults to 80 if empty]
port=8983(端口号)
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# 增量索引的参数
# URL params [mandatory]
# remainder of URL
params=/dataimport?command=delta-import&clean=true&commit=true
# 重做增量索引的时间间隔
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重做全量索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
#reBuildIndexInterval=7200
# 重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
- 配置监听器
在web.xml(D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF)中加入以下代码:
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
- 修改data-config.xml
deltaQuery="select id from user where updateTime >'${dih.last_index_time}'"
deltaImportQuery="select id,name,pwd from user where id ='${dih.delta.id}'"
放入jar包
将包ik-analyzer-solr7-7.x.jar放入D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib
(路径下)
在D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF路径下创建文件夹classes,
将以下三个文件放入classes文件夹中
ext_stopword.dic 分词文件
IKAnalyzer.cfg.xml IK配置文件
mydict.dic 字典文件
配置文件(solr实例中配置)
在managed-schema中配置以下代码
<field name="name" type="text_ik" indexed="true" stored="true"/>
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
注意以下改动
Java代码
导入jar包
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.4.0</version>
</dependency>
相关代码
@Test
public void search() throws IOException, SolrServerException {
//可以定义为常量(new_core是数据名称)
String solrUrl = "http://localhost:8983/solr/new_core";
HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
SolrQuery query = new SolrQuery();
//key值为命令,value值为对应的值
query.set("q","*:*");
query.setSort("id", SolrQuery.ORDER.desc);
query.setFields("name");
QueryResponse response = solrClient.query(query);
SolrDocumentList docs = response.getResults();
long cnt = docs.getNumFound();
System.out.println("总条数为"+cnt+"条");
for (SolrDocument doc : docs) {
System.out.println("id:"+ doc.get("u_id") + ",name:"+ doc.get("name"));
}
solrClient.close();
}