solr的使用方式

冷暖自知 提交于 2019-12-14 06:06:36

solr的使用

本博客solr版本为7.7.2

下载地址: http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.7.2/solr-7.7.2.zip

下载完压缩文件后解压到本地即可

打开

使用cmd进入控制台,然后进入solr-7.7.2\bin文件夹,在文件夹中输入

solr start

默认端口号是8983,注意窗口不要关闭

打开后访问 http://localhost:8983/solr可以访问solr后台管理

点击选项中的core admin创建一个实例,

如果创建失败提示没有配置文件可以直接把solr-7.7.2\server\solr\configsets_default下的面conf文件夹复制到实例文件夹中

注意查看日志

导入数据

导入驱动

在core中创建lib文件夹存入jar包

放好后刷新core,在core admin选择reload刷新

修改 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文件

在conf文件夹下创建data-config.xml配置文件,配置对应的数据库以及对应的索引数据

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
			driver="com.mysql.jdbc.Driver"
			url="jdbc:mysql://localhost:3306/myschool"
			user="root"
			password="root"/>
	<document>
		<entity name="product" query="SELECT * FROM student">
			<field column="id" name="id" />
			<field column="name" name="name" />
			<field column="password" name="password" />
		</entity>
	</document>
</dataConfig>

修改managed-schema文件

修改managed-schema配置,添加

<field name="name" type="string" indexed="false" stored="false"/>
<field name="password" type="string" indexed="false" stored="false"/>

开始导入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scvRePLn-1576127154510)(C:\Users\11071\AppData\Roaming\Typora\typora-user-images\image-20191209144735504.png)]

做完后刷新状态

增量更新

1、修改数据库

修改数据库增加时间字段updateTime(如果原来有的话就不需要更改了),数据类型改为timestamp,然后运行下面SQL,设置数据库字段默认值CURRENT_TIMESTAMP,并且更改时直接更改该字段

数据库更改记录更新时间

alter table `user` modify updateTime timestamp default current_timestamp on update current_timestamp;

2、添加jar包

在solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib目录下添加solr-dataimport-scheduler.jar

3、添加配置文件,在solr-7.7.2\server\solr文件下创建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=实例名称
#  solr server name or IP address  
#  [defaults to localhost if empty]  
server=IP地址
#  solr server port  
#  [defaults to 80 if empty]  
port=端口号
#  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

这里的作用是设置间隔时间,每隔1分钟向solr发送请求,更新数据

4、配置web.xml

在solr-7.7.2\server\solr-webapp\webapp\WEB-INF目录下的web.xml中添加

<listener>  
		<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>  
   </listener>  

5、修改实例中的data-config.xml

在文件夹solr-7.7.2\server\solr\new_core\conf中的data-config.xml中的entity标签中添加操作

deltaQuery="select id from user where updateTime >'${dih.last_index_time}'"
deltaImportQuery="select id,name,password from user where id ='${dih.delta.id}'"

这里的思路是查询所有更新时间>系统时间数据的ID,然后根据ID重新查询导入

常规查询

点击query可以实现查询,查询语法如下:

命令 作用 例子
q 主要查询参数 名称:值
fq 过滤,类似于where 写法同上,不同的是可以有多个
sort 排序 列名 desc/asc
start,rows 开始和结束也就是分页
fl 限制行
df 默认行
indent off 是否缩进
debugQuery 设置返回结果是否显示Debug信息

中文分词

中文分词

1、存放jar包

把ik-analyzer-solr7-7.x.jar存入solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib文件夹

2、存放配置文件

在solr-7.7.2\server\solr-webapp\webapp\WEB-INF\文件夹下创建classes文件夹

在原本的文件夹中复制三个配置文件到该文件夹下

ext_stopword.dic 分词文件

IKAnalyzer.cfg.xml IK配置文件

mydict.dic 字典文件

3、配置Solr实例

在solr实例中配置

<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操作———solrj

1、引入jar包

<dependency>
	<groupId>org.apache.solr</groupId>
	<artifactId>solr-solrj</artifactId>
	<version>7.4.0</version>
</dependency>

2、编写代码(只有查询)

@Test
public void search() throws IOException, SolrServerException {
    String solrUrl = "http://localhost:8983/solr/new_core";
    HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
    SolrQuery query = new SolrQuery();

    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();
}

st 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();
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!