1、安装软件
1.1、 下载solr http://archive.apache.org/dist/lucene/solr/7.7.1/
1.2、解压到D盘中
1.3、进入目录/bin 启动 solr start -p 默认端口 8983
1.4、 访问 http://localhost:8983/solr/#/
1.5、创建 solr create -c my_core
1.6、重启 solr restart -p 8983
2、配置ik分词器
中文分词器 IK-Analyzer-Solr7
2.1、 下载jar 在maven的jar仓库中 https://search.maven.org/
输入 com.github.magese,然后下载 ik-analyzer-solr7.jar
复制到 D:\solr-7.7.1\server\solr-webapp\webapp\WEB-INF\lib
2.2、在D:\server\solr-7.7.1\server\solr\lhc_core\conf中的managed-schema
添加如下内容
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" conf="ik.conf" useSmart="false"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" conf="ik.conf" useSmart="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
重启solr,可以看到有了新的分词,text_cn
3、配置数据导入
3.1、将以下jar文件
mysql-connector-java-5.1.46.jar
solr-dataimporthandler-7.7.1.jar
solr-dataimporthandler-extras-7.7.1.jar
复制到 D:\solr-7.7.1\server\solr-webapp\webapp\WEB-INF\lib
在D:\solr-7.7.1\server\solr\my_core\conf 文件夹下 solrconfig.xml文件中添加:
<lib dir="../lib" regex=".*\.jar" />
< requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
3.2、新增data-config.xml配置文件,有的话就修改
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
user="root"
password="root"/>
<document>
<entity name="usre" query=" SELECT id,user_name from user ">
<field column="id" name="id"/>
<field column="user_name" name="user_name"/>
</entity>
</document>
</dataConfig>
3.3、然后配置 managed-schema 文件中新增
<field name="id" type="pint" indexed="true" stored="true"/>
<field name="user_name" type="text_ik" indexed="true" stored="true"/>
访问页面,进行数据导入
4、应用项目
4.1、配置文件中加入:
spring.data.solr.host=http://172.16.0.1:3333/solr/test_core
maven配置文件pom.xml 文件中:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.7.1</version>
</dependency>
4.2、代码中使用:
新增java类:SolrConfig.java,放在config 文件夹中
@Configuration
public class SolrConfig {
@Value("${spring.data.solr.host}")
private String solrUrl;
@Bean
public HttpSolrClient HttpSolrClient() {
return new HttpSolrClient.Builder(solrUrl).withConnectionTimeout(10000).withSocketTimeout(60000).build();
}
}
在需要使用的java类中
@Autowired
private HttpSolrClient httpSolrClient;
保存或更新
//创建一个输入元素
SolrInputDocument doc = new SolrInputDocument();
//创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("user_id:"+id);
//执行查询
QueryResponse queryResponse = httpSolrClient.query(query);
//取文档列表,取查询结果总记录数
SolrDocumentList results = queryResponse.getResults();
if (results!=null&&results.size()>0) {
//如果存在就修改
doc.setField("id", results.get(0).get("id"));
}
doc.setField("user_id", id);
doc.setField("user_name", user_name);
httpSolrClient.add(doc);
//执行操作
httpSolrClient.commit();
删除:
httpSolrClient.deleteByQuery("user_id:"+id);
//执行操作
httpSolrClient.commit();
查询:
SolrQuery query = new SolrQuery();
String queryText = "*:*";
if(StringUtils.isNotBlank(keyword)){
keyword = ClientUtils.escapeQueryChars(keyword); //对特殊字符转义
queryText = "user_name:" + keyword + " || email:" + keyword + "; //组装检索条件
}
query.set("q", queryText);
query.addFilterQuery("state:" + state);
query.set("sort", "id asc"); //排序
//分页
query.set("start", (pageNumber - 1) * pageSize);
query.set("rows", pageSize);
//设置高亮域(设置的域必须在查询条件中存在)
query.addHighlightField("user_name");
query.setHighlightFragsize(0);
query.setHighlightSimplePre("<font color='red'>"); //前缀 这里的话,如果用thymeleaf模板,css样式生效需要加th:utext...
query.setHighlightSimplePost("</font>"); //后缀
QueryResponse response = httpSolrClient.query(query);
//普通查询
SolrDocumentList results = response.getResults();
Integer totalCount = Integer.valueOf(String.valueOf(results.getNumFound())); //检索匹配的总数量
//高亮查询
NamedList<SimpleOrderedMap> namedList = (NamedList<SimpleOrderedMap>) response.getResponse().get("highlighting");
5、问题解答:
导入数据时,如果出现fetched:0 时,或者导入失败
原因如下:
1、数据库驱动版本有误,可以更换其他版本试试
2、配置文件中数据库链接相关信息有误
3、没有在managed-schema 里面配置子filed信息
4、没有导入相应的jar文件