Solr 7.5.0 windows单机版

章节目录

第一节:下载solr                               第二节:解压、启动、访问solr

第三节:使用命令添加/删除 core      第四节:core相关配置文件简介及操作

第五节:IK分词器                              第六节:从数据库导入数据到solr

第七节:使用solrj操作solr

 

一:下载solr

地址:Solr-7.5.0.zip 下载

Solr 7.5.0 windows单机版_第1张图片

Solr 7.5.0 windows单机版_第2张图片

 

二:解压,启动,访问solr服务

▶▶ 解压

Solr 7.5.0 windows单机版_第3张图片

▶▶ 启动:进入bin目录,打开cmd,启动命令 solr start,默认端口8983,启动时可以通过 -p 来指定端口号

如:solr start -p 6789

Solr 7.5.0 windows单机版_第4张图片

▶▶ 访问   浏览器输入:http://localhost:6789/solr

Solr 7.5.0 windows单机版_第5张图片

 

▶▶ solr 启动、停止、重启命令

solr start -p 端口号

solr stop -all

solr restart -p 端口号

 

三:使用命令添加/删除 core

create

● solr create -c name

delete

● solr delete -c name

 

示例:创建名为 mote 的core,并访问这个core

▶▶ 创建

Solr 7.5.0 windows单机版_第6张图片

▶▶ 查看    路径:solr-7.5.0\server\solr

Solr 7.5.0 windows单机版_第7张图片

▶▶ 访问

Solr 7.5.0 windows单机版_第8张图片

 

四:core的配置文件介绍  

路径:solr-7.5.0\server\solr\mote\conf

下图中标红的两个文件是最重要的两个配置文件

Solr 7.5.0 windows单机版_第9张图片

 

▶▶ solrconfig.xml

solrconfig.xml主要定义了Solr的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置

● luceneMatchVersion:表示solr底层使用的是lucene版本

● lib:表示solr引用包的位置,当dir对应的目录不存在时候,会忽略此属性

● datadDir:定义了索引数据和日志文件的存放位置

● directoryFactory:索引存储方案

● codecFactory:指定编码、解码器

● indexConfig:设置索引的低级别的属性

● updateHandler

          ☛ updateLog:设置索引库更新日志

          ☛ autoCommit:设置自动硬提交方式

● query:设置查询相关参数

● requestHandler:solr请求转发器

● requestHandler:solr请求映射处理器

 

▶▶ managed-schema

managed-schema主要定义了索引数据类型,索引字段等信息。老版本的schema配置文件是schema.xml,它的编辑方式是手动编辑,而managed-schema的编辑方式是通过chemaAPI来配置

● uniqueKey:文档的唯一标示,相当于主键,每次更新,删除的时候都根据这个字段来进行操作

● fieldtype

        ☛ 定义数据类型

        ☛ 定义当前类型建立索引和查询数据的时候使用的查询分词器    

Solr 7.5.0 windows单机版_第10张图片

● field:指定建立索引和查询数据的字段

● dynamicField:动态定义一个字段,只要符合规则的字段都可以

例 

*_i 只要以_i结尾的字段都满足这个定义。

● copyField:把一个字段的值复制到另一个字段中,这样搜索的时候都可以根据一个字段来进行搜索

 

▶▶ Schema API 操作managed-schema

准备工具 Postman    地址:Postman 下载

● add-field

Solr 7.5.0 windows单机版_第11张图片

managed-schema中查找到刚添加的feild

● delete-field

Solr 7.5.0 windows单机版_第12张图片

更多操作参考官方文档:schema-api

 

五:IK分词器

下载地址1:ik分词器 下载

下载地址2:ik分词器 下载

Solr 7.5.0 windows单机版_第13张图片

● 将 ik-analyzer-solr7-7.x.jar 放入 solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 目录下

● 配置managed-schema



  
      
      
  
  
      
      
  

● 重启Solr   solr restart -p 6789

● 测试 ik分词器效果 

Solr 7.5.0 windows单机版_第14张图片

● 定义 ik分词器的 拓展/停用 词典

1:在 solr-7.5.0\server\solr-webapp\webapp\WEB-INF 新建classes目录

2:在classes新建三个文件

3:编辑文件内容

ext.dic

stopword.dic

IKAnalyzer.cfg.xml


  
  
	IK Analyzer 扩展配置
	 
	ext.dic; 
	
	
	stopword.dic; 
	

● 重启Solr

● 重新分词,将结果与上次进行对比

Solr 7.5.0 windows单机版_第15张图片

 

六:将数据库数据导入solr

方式一:SolrJ导入,第七节中说

方式二:Solr DataImportHandler

DataImportHandler提供一种可配置的方式向Solr导入数据,可以全量导入,也可以增量导入,还可声明式提供可配置的任务调度,让数据定时从关系型数据库中更新数据到Solr服务器

● 下载 mysql-connector-java-6.0.6.jar 添加到solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 下

● 将solr-dataimporthandler-7.5.0.jar 、solr-dataimporthandler-extras-7.5.0.jar 从 solr-7.5.0\dist 复制到solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib 下

● 使用Postman 添加field,与数据库表的字段对应起来(id字段配置文件中本来就有)

{
  "add-field":{
     "name":"name",
     "type":"text_ik",
     "stored":true,
     "indexed":true}
}

● 修改 solrconfig.xml 添加 dataImport 请求资源映射

   
       
        data-config.xml   
       

● solr-7.5.0\server\solr\mote 目录下创建 data-config.xml,配置访问数据库的用户名、密码、查询语句,column对应数据库中字段、name对应solr的schema.xml中字段


    
    
        
            
            
        
    

● 重启Solr: solr restart -p 6789

●  导入数据

Solr 7.5.0 windows单机版_第16张图片

● 查看数据

Solr 7.5.0 windows单机版_第17张图片

7:SolrJ

SolrJ是访问Solr服务的JAVA客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务

● 导入maven依赖



	org.apache.solr
	solr-solrj
	7.4.0

 


	com.fasterxml.jackson.core
	jackson-annotations
	${jackson.version}

● 定义User

import org.apache.solr.client.solrj.beans.Field;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

//jackSon注解:忽略未匹配到的字段
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {

	public User(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public User() {
		super();
	}

	// solr查询若直接将数据转为对象,需要指定Field,该值需要和managed-schema配置Field的name一致
	@Field("id")
	private String id;

	@Field("name")
	private String name;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}

}

● 测试CRUD

import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Before;
import org.junit.Test;

public class SolrJCRUD {

	private SolrClient solrClient;

	/**
	 * 初始化solrClient
	 */
	@Before
	public void before() {
		solrClient = new HttpSolrClient.Builder(
				"http://localhost:6789/solr/mote").build();
	}

	/**
	 * 通过对象添加单条数据,若添加时id已存在,那么solr会执行修改操作
	 */
	@Test
	public void addBean() throws Exception {

		User user = new User("6", "小美眉");

		solrClient.addBean(user);
		solrClient.commit();
	}

	/**
	 * 批量添加 也就是第六节提到的方式一
	 */
	@Test
	public void addBeans() throws Exception {

		// 从数据库查出所有的user,UserService操作数据库部分的代码省略
		List users = UserService.getUsers();

		// 添加
		solrClient.addBeans(users);
		solrClient.commit();
	}

	/**
	 * 通过document添加单条数据
	 */
	@Test
	public void addDocument() throws Exception {

		SolrInputDocument document = new SolrInputDocument();
		document.addField("id", "5");
		document.addField("name", "girl");

		solrClient.add(document);
		solrClient.commit();
	}

	/**
	 * 两种删除方式
	 */
	@Test
	public void deleteById() throws Exception {

		// 方式一:根据id删除
		solrClient.deleteById("4");

		// 方式二:根据查询结构删除
		solrClient.deleteByQuery("name:马云");

		solrClient.commit();
	}

	/**
	 * 查询
	 */
	@Test
	public void query() throws Exception {

		// 构造搜索条件
		SolrQuery solrQuery = new SolrQuery();

		// 设置搜索关键词
		solrQuery.setQuery("name:马云");

		// 设置排序
		solrQuery.setSort("id", SolrQuery.ORDER.desc);

		// 设置分页信息
		solrQuery.setStart(0);
		solrQuery.setRows(2);

		// 设置高亮
		solrQuery.setHighlight(true); // 开启高亮组件
		solrQuery.addHighlightField("name");// 高亮字段
		solrQuery.setHighlightSimplePre("");// 标记,高亮关键字前缀
		solrQuery.setHighlightSimplePost("");// 后缀

		// 执行查询
		QueryResponse response = solrClient.query(solrQuery);

		// 获取查询结果
		List users = response.getBeans(User.class);

		// 将高亮的标识写进对象的name字段上
		Map>> map = response.getHighlighting();
		for (Map.Entry>> highlighting : map
				.entrySet()) {
			for (User user : users) {
				if (!highlighting.getKey().equals(user.getId().toString())) {
					continue;
				}
				user.setName(highlighting.getValue().get("name").toString());
				break;
			}
		}

		// 打印搜索结果
		for (User user : users) {
			System.out.println(user);
		}
	}
}

 

linux 单机版solr:linux单机版 solr

你可能感兴趣的:(solr)