直接上
cd /usr/local/src
1.下载:wget https://mirror.bit.edu.cn/apache/lucene/solr/8.6.2/solr-8.6.2.tgz
解压: tar -xzvf solr-8.6.2.tgz
2.打开解压后的目录
拷贝server/solr-webapp/webapp下所有到tomcat并命名solr8
cp -r server/solr-webapp/webapp/ /usr/local/tomcat9/webapps/solr8
3.拷贝server/lib/里开头为metrics所有文件到tomcat
cd /usr/local/src/solr-8.6.2/server/lib
cp ./metrics-* /usr/local/tomcat9/webapps/solr8/WEB-INF/lib/
4.拷贝server/lib/ext下所有到tomcat
cp ./ext/* /usr/local/tomcat9/webapps/solr8/WEB-INF/lib/
5.拷贝log4j到tomcat, 然后编辑一下日志文件,改一下生成文件的地址 不然日志文件到处都是
mkdir /usr/local/tomcat9/webapps/solr8/WEB-INF/classes
cd /usr/local/src/solr-8.6.2/server/resources/
cp -r log4j2* /usr/local/tomcat9/webapps/solr8/WEB-INF/classes/
6.创建solrhome,把server下solr拷贝成solr8home
cp -r ./server/solr /usr/local/solr8home
7.打开 cd /usr/local/tomcat9/webapps/solr8/WEB-INF/
vim web.xml
注释这段代码
<!--
<security-constraint>
...
-->
添加这些代码,保存退出
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr8home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
8.访问solr,创建一个项目 myshop
9.拷贝conf
cp -r /usr/local/src/solr-8.6.2/server/solr/configsets/_default/conf /usr/local/solr8home/myshop/
- 把ik分词器和mysqljdbc包,还有不知道啥玩意的两个包。放在tomcat的solr的lib下
自己百度下载吧
cd /usr/local/tomcat9/webapps/solr8/WEB-INF/lib
11.增加数据库配置
cd /usr/local/solr8home/myshop/conf
vim solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
12.编辑数据库配置
vim data-config.xml
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db_shop?characterEncoding=utf8;useSSL=false;serverTimezone=UTC;rewriteBatchedStatements=true"
user="xxxxx"
password="xxxxx"/>
<!--这里配置要映射的表名product和查询语句。column是数据库的字段,name是...solr查询出来的字段-->
<document>
<entity name="product" query="select product_id, price, category_name, category_id, sort, pic, name, sub_title, keywords from product">
<field column="product_id" name="id" />
<field column="name" name="name" />
<field column="sub_title" name="sub_title" />
<field column="keywords" name="keywords" />
<field column="pic" name="pic" />
<field column="price" name="price" />
<field column="category_id" name="category_id" />
<field column="category_name" name="category_name" />
<field column="sort" name="sort" />
</entity>
</document>
</dataConfig>
13.设置字段参数
vim managed-schema 找个地放添加下面的
<field name="price" type="pdouble" indexed="true" stored="true"/>
<!-- <field name="product_id" type="pint" uninvertible="true" indexed="true" stored="true"/> -->
<field name="sort" type="pint" uninvertible="true" indexed="true" stored="true"/>
<field name="pic" type="string" uninvertible="true" indexed="true" stored="true"/>
<field name="category_id" type="string" uninvertible="true" indexed="true" stored="true"/>
<field name="sub_title" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
<field name="keywords" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
<field name="name" type="text_ik" uninvertible="true" indexed="true" stored="true" />
<field name="category_name" type="string" uninvertible="true" indexed="true" stored="true" />
<field name="allkey" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<copyField source="name" dest="allkey"/>
<copyField source="category_name" dest="allkey"/>
<copyField source="sub_title" dest="allkey"/>
<!--设置ik分词器-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
启动tomcat…
Springboot中使用
pom.xml
<!--solr-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.2.0</version>
</dependency>
application.yml
spring:
data:
solr:
host: "http://127.0.0.1:8081/solr8/myshop" #tomcat的
service
/**
* solr操作
*/
@Service
public class Service_Search {
@Resource
SolrClient client;
//查询
public ProductVo QueryGoods(int pageStart, int pageSize, String query, String filtration, String interval, String SortField, String sort) throws Exception {
SolrQuery solrQuery = new SolrQuery();
List<Product> productList = new ArrayList<>();
ProductVo vo = new ProductVo();
if (query != null && query != "" && query != "null") {
query = query.replaceAll(" ", "");
solrQuery.setQuery("allkey:" + query);
} else {
solrQuery.set("q", " *:* ");
}
solrQuery.set("defType", "edismax");
solrQuery.set("mm", "100%");
//过滤条件查询
if (filtration != null && filtration != "") {
solrQuery.addFilterQuery(filtration);
}
//价格搜索
if (interval != null && interval != "") {
String[] strings = interval.split("-");
solrQuery.addFilterQuery("price:[" + strings[0] + " TO " + strings[1] + "]");
}
//倒序
if (SortField != null && SortField != "") {
if (sort.equals("desc")) {
solrQuery.addSort(SortField, SolrQuery.ORDER.desc);
} else {
solrQuery.addSort(SortField, SolrQuery.ORDER.asc);
}
}
//分页设置
solrQuery.setStart(pageStart);
solrQuery.setRows(pageSize);
solrQuery.add("df", "name");
//设置高亮
solrQuery.setHighlight(true);
solrQuery.addHighlightField("name");
solrQuery.addHighlightField("sub_title");
solrQuery.setHighlightSimplePre("<b style='color:red'>");
solrQuery.setHighlightSimplePost("</b>");
QueryResponse response = client.query(solrQuery);
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
SolrDocumentList documents = response.getResults();
vo.setTotal(documents.getNumFound());
for (SolrDocument solrDocument : documents) {
Product product = new Product();
product.setProduct_id(Long.parseLong(solrDocument.get("id").toString()));
product.setPic(solrDocument.get("pic").toString().split(",")[0]);
product.setPrice(new BigDecimal(solrDocument.get("price").toString()).setScale(2));
product.setSort(Long.parseLong(solrDocument.get("sort").toString()));
product.setCategory_id(Long.parseLong(solrDocument.get("category_id").toString()));
product.setCategory_name(solrDocument.get("category_name").toString());
product.setKeywords(solrDocument.get("keywords").toString());
List<String> names = highlighting.get(solrDocument.getFieldValue("id").toString()).get("name");
List<String> subtitle = highlighting.get(solrDocument.getFieldValue("id").toString()).get("sub_title");
if (names != null) {
product.setName(names.get(0));
} else {
product.setName(solrDocument.get("name").toString());
}
if (subtitle != null) {
product.setSub_title(subtitle.get(0));
} else {
product.setSub_title(solrDocument.get("sub_title").toString());
}
productList.add(product);
}
vo.setProducts(productList);
return vo;
}
//删除
public void DeleteGoods(List<String> ids) {
try {
for (String s : ids) {
client.deleteByQuery("id:" + s);
}
client.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
//更新
public void SaveUpdateGoods(Product product) {
try {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", product.getProduct_id());
document.addField("price", product.getPrice().toString());
document.addField("sort", product.getSort());
document.addField("category_id", product.getCategory_id());
document.addField("sub_title", product.getSub_title());
document.addField("keywords", product.getKeywords());
document.addField("name", product.getName());
document.addField("pic", product.getPic());
document.addField("category_name", product.getCategory_name());
client.add(document);
client.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//==========controller==================
@Resource
private Service_Search service_search;
@ApiOperation("QueryGoods分页搜索商品")
@RequestMapping("/QueryGoods")
public ResponseCon QueryGoods(int pageStart, int pageSize, String query, String filtration, String interval, String SortField, String sort) {
try {
System.out.println("\n搜索参数:size: " + pageStart + ",num: " + pageSize + ",query: " + query + ",filtration: " + filtration + ",interval: " + interval + ",SortField: " + SortField + ",sort: " + sort);
return new ResponseCon(200, "success", service_search.QueryGoods(pageStart, pageSize, query, filtration, interval, SortField, sort));
} catch (Exception e) {
e.printStackTrace();
System.out.println("查询错误");
return new ResponseCon(401, "error", "查询错误");
}
}
不懂多百度吧… windows中配置基本都一样,直接拷贝tomcat的solr下来都能用