官网
https://solr.apache.org/
官方文档
https://solr.apache.org/guide/solr/latest/deployment-guide/solrj.html
1.介绍
Solr是一个高性能,采用Java开发,基于Lucene的开源全文搜索服务器
不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。
solr 需要运行在一个Servlet容器中,Solr默认提供Jetty(Java写的Servlet容器)
数据默认是存储在solrhome/实例名/data里面
Solr之配置文件Solrconfig.xml和solr.xml说明 - 简书
2.Tomcat 发布 solr
基础功能使用:https://blog.csdn.net/zhidongxv/article/details/125614322
如果要使用所有扩展功能,还要增加下面的步骤
将solr-8.11.2\contrib \solr-8.11.2\dist 两个文件夹拷贝到solrhome目录下
将\solr-8.11.2\dist 文件夹下的所有内容拷贝到apache-tomcat-8.5.84\webapps\solr\WEB-INF\lib 目录下
3.主要配置解释
官方介绍: https://solr.apache.org/guide/8_11/solr-configuration-files.html
4.上传文档并自定义索引字段(使用solrj)
pom.xml引入依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.11.0</version>
</dependency>
测试代码
package com.example.demo.controller;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.util.NamedList;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class SolrTest {
public static void main(String [] args) throws IOException, SolrServerException {
// 上传文件,且自定义索引字段
SolrClient client = new HttpSolrClient.Builder("http://192.168.159.129:8080/solr/file_core").build();
ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
req.addFile(new File("C:\\Users\\wx\\Desktop\\solr.xlsx"),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
req.setParam("literal.id", "55");
/**
* 不设置下面两个注释的参数的话,需要在solrhome的managed-schema文件中加上:
* <field name="addfiled" type="string" indexed="true" stored="true" multiValued="false" />
* 修改solrhome的配置文件后记得重启tomcat
* 设置了下面两个参数的话,则在检索时,字段名称就要加个attr_前缀
* 如果需要动态设置检索字段,推荐使用这种方法,但是要注意,solrhome的managed-schema配置文件里有很多默认的字段,不需要的可以删除
*/
req.setParam("literal.addfiled", "新增字段");
//req.setParam("uprefix", "attr_");
// req.setParam("fmap.content", "attr_content");
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
NamedList<Object> result = client.request(req);
System.out.println("Result: " + result);
// 根据自定义索引字段检索文件
SolrClient client1 = new HttpSolrClient.Builder("http://192.168.159.129:8080/solr").build();
final Map<String, String> queryParamMap = new HashMap<String, String>();
queryParamMap.put("q", "addfiled:新增字段");
// queryParamMap.put("q", "attr_addfiled:新增字段");
MapSolrParams queryParams = new MapSolrParams(queryParamMap);
final QueryResponse response = client1.query("file_core", queryParams);
final SolrDocumentList documents = response.getResults();
System.out.println("Found " + documents.getNumFound() + " documents");
// 上传普通文档
final SolrInputDocument doc = new SolrInputDocument();
doc.addField("id","22222");
doc.addField("name", "Amazon Kindle Paperwhite");
final UpdateResponse updateResponse = client.add("new_core", doc);
client.commit("new_core");
}
}