由于公司项目用到solr,本文是做一下笔记,版本是windows solr7.5
下载地址
启动:在bin目录下输入 solr start 或者指定端口 solr start -p 端口号
1.创建自己的core,每个核心都是solr的一个实例,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。
在D:\solr\solr-7.5.0\server\solr创建一个叫new_core的文件夹,将configsets中default文件下的config复制导new_core文件夹下
然后在这样
也可以这样bin目录下输入命令 solr create –c new_core
配置一下中文分词器
这个放百度云了
将这两个jar放到 D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib
类外三个文件放到 D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\classes
配置一下schema,在new_core文件夹下的managed-schema,版本变更后文件名改了(其实之前的版本我也不知道,我也是现学的)
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
解释一下
fieldType:为field定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。
analyzer:fieldType的子元素,是分词器,由tokenizer和filter组成。例如
配置一下数据库导入数据配置文件的的字段和这个里面的字段一致即可
*不导入数据库数据直接配置字段在这个文件,进行增删改查
field:字段,用来创建索引,如果这个字段需要生成索引,则需要设置的indexed为true,需要存储设置stored属性为true
<field name="userid" type="string" indexed="true" stored="true"/>
<field name="username" type="string" indexed="true" stored="true"/>
<field name="wxlogin" type="string" indexed="true" stored="true"/>
<field name="qqlogin" type="string" indexed="true" stored="true"/>
<field name="mobile" type="string" indexed="true" stored="true"/>
Linux 下 配置环境变量
vi /etc/profile
编辑profile文件末尾追加:
export SOLR_INSTALL_HOME=/usr/solr-7.4.0
export PATH=$PATH:$SOLR_INSTALL_HOME/bin
执行如下命令使环境变量生效
source /etc/profile
将/user/local/solr/solr-7.5.0/bin/solr.in.sh文件中,SOLR_ULIMIT_CHECKS设置为false,消除WARN
solr start -c -force 以root用户启动,-p指定端口
Java代码
application.yml
# solr
spring:
data:
solr:
host: http://localhost:8989/solr/new_core
这里不指明会报错的
实体
public class BcUser {
@Id
@Field
private int id;
@Field
private String userid;
@Field
private String username;
@Field
private String wxlogin;
@Field
private String qqlogin;
@Field
private String mobile;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getWxlogin() {
return wxlogin;
}
public void setWxlogin(String wxlogin) {
this.wxlogin = wxlogin;
}
public String getQqlogin() {
return qqlogin;
}
public void setQqlogin(String qqlogin) {
this.qqlogin = qqlogin;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "BcUser{" +
"id=" + id +
", userid='" + userid + '\'' +
", username='" + username + '\'' +
", wxlogin='" + wxlogin + '\'' +
", qqlogin='" + qqlogin + '\'' +
", mobile='" + mobile + '\'' +
'}';
}
}
测试
package com.zhou.search;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zhou.search.entity.BcUser;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SearchApplicationTests {
@Autowired
private SolrClient client;
@Autowired
private SolrTemplate solrTemplate;
//插入
@Test
public void contextLoads() {
try {
BcUser bcUser=new BcUser();
bcUser.setId(4);
bcUser.setMobile("465456534564");
bcUser.setQqlogin("156456456454");
bcUser.setUsername("我的第58个测试text");
bcUser.setWxlogin("微信登录");
client.addBean(bcUser);
client.commit();
}catch (Exception e){
}
}
//根据id去查
@Test
public void textfind() throws Exception{
SolrDocument byId = client.getById("3");
Gson gson = new Gson();
// 方法1
String solrString = gson.toJson(byId);
BcUser bcUser = gson.fromJson(solrString, BcUser.class);
System.out.println(bcUser);
//Optional<BcUser> new_code = solrTemplate.getById("new_code", 10005, BcUser.class);
System.out.println();
}
//模糊查
@Test
public void findName()throws Exception{
String name="我";
SolrQuery params = new SolrQuery();
params.setQuery("username:*"+name+"*");
QueryResponse response = client.query(params);
SolrDocumentList documentList = response.getResults();
Gson gson = new Gson();
String listString = gson.toJson(documentList);
List<BcUser> bcUsers = gson.fromJson(listString, new TypeToken<List<BcUser>>() {
}.getType());
System.out.println(bcUsers);
}
//查所有
@Test
public void findList()throws Exception{
SolrQuery params = new SolrQuery();
params.setQuery("*:*");
QueryResponse response = client.query(params);
SolrDocumentList documentList = response.getResults();
Gson gson = new Gson();
String listString = gson.toJson(documentList);
List<BcUser> bcUsers = gson.fromJson(listString, new TypeToken<List<BcUser>>() {
}.getType());
System.out.println(bcUsers);
}
}
配置多表
先配置数据库连接数据
将solr_home\dist(D:\solr\solr-7.5.0\dist)目录下的solr-dataimporthandler-7.5.0.jar和MySQL驱动(随便找个MySQL驱动)复制到solr_home\server\solr-webapp\webapp\WEB-INF\lib(D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib)目录下。
在new_core下创建一个叫my-data-config.xml的文件,具体这样写
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/app-service"
user="root" password="123456"/>
<document>
<entity name="BcUsers" query="select id,userid,username,wxlogin,qqlogin,mobile from bc_users">
<field column="id" name="id"/>
<field column="userid" name="userid"/>
<field column="username" name="username"/>
<field column="wxlogin" name="wxlogin"/>
<field column="qqlogin" name="qqlogin"/>
<field column="mobile" name="mobile"/>
<entity name="BcUsersdetail" query="select id,userid,username,wxlogin,qqlogin,mobile from bc_users-detail where user_id='${BcUsers.id}' ">
<field column="aa" name="aa"/>
<field column="bb" name="bb"/>
<field column="bb" name="bb"/>
</entity>
</entity>
</document>
</dataConfig>
注意这些字段要添加到schema那边,直接加上就行了
在这个目录下的solrconfig.xml里面这样写,随便找一个requestHandler,同级下写上这个
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">my-data-config.xml</str>
</lst>
</requestHandler>
重启solr
再操作一下放大镜就o了
差不多就这样,自己看得懂就行了