# Solr基础


<!--more-->

## 1. solr简介

为了在CNET 公司网站上添加搜索功能，Yonik Seely于2004年创建了Solr。并在2006年1月，它成为Apache软件基金会下的一个开源项目。并于2016年发布新版本Solr 6.0，支持并行SQL查询的执行,目前最新的版本是8.6.0

## 2. solr和lucene的区别

Lucene是一个开放源代码的全文检索工具包，它不是一个完整的全文检索应用。Lucene仅提供了完整的**查询引擎**和**索引引擎** 仍然需要关注**数据获取、解析、索引查**看等方面的东西。Lucene的目的是为软件开发人员提供一个简单易用的工具包，以方便的在目标系统中实现全文检索的功能，或者以Lucene为基础构建全文检索应用

 Solr的目标是打造一款企业级的搜索引擎系统，它是基于Lucene一个搜索引擎服务，可以独立运行，通过Solr可以非常快速的构建企业的搜索引擎，通过Solr也可以高效的完成站内搜索功能

优势:

1、solr是已经将整个索引操作功能封装好了的搜索引擎系统(企业级搜索引擎产品) 

2、solr可以部署到单独的服务器上(WEB服务)提供服务，我们的业务系统就只要发送请求，接收响应即 可，降低了业务系统的负载并且solr的索引库就不会受业务系统服务器存储空间的限制 

3、solr支持分布式集群，索引服务的容量和能力可以线性扩展 

## 3. 核心特性

1. 先进的全文搜索功能 

2. 基于标准的开放接口,Solr搜索服务器支持通过XML、JSON和HTTP查询和获取结果。 

3. 高度可扩展和容错,能够有效地复制到另外一个Solr搜索服务器 

4. Solr可以通过HTML页面管理,使用XML配置达到灵活性和适配性 

5. 灵活的插件体系 新功能能够以插件的形式方便的添加到Solr服务器上。 

6. 强大的数据导入功能 数据库和其他结构化数据源现在都可以导入、映射和转化。

## 4. 安装方式

**方式一:**

- 下载压缩包

  ```sh
  直接去官网下载 https://lucene.apache.org/solr/downloads.html
  wget https://dlcdn.apache.org/lucene/solr/8.11.2/solr-8.11.2.tgz
  ```

- 解压

  ```sh
  tar -xvf solr-8.11.2.tgz
  ```

- 启动solr

  ```sh
  #在solr bin目录下 默认端口 8983
  ./solr start -force -port 端口
  ```

- 使用浏览器访问

  ```http
  http://主机:端口
  ```

- 配置solr_core 

  在server/solr下建立一个文件夹名字: 任意取名,如 new_core

  ```sh
  cp -rf configsets/_default/conf/ new_core
  ```

  修改 managed-schema 为 schema.xml

**方式二:**

主要是部署到tomcat 下, 这种方式现在不常用, 不做演示.

## 5. 管理界面功能介绍

**Dashboard**

仪表盘，显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。

**Logging**

日志:显示 solr 运行出现的异常或错误

**Cloud**

Cloud即SolrCloud，即Solr云（集群），当使用Solr Cloud模式运行时会显示此菜单。

**Core Admin**

Solr Core的管理界面。在这里可以添加SolrCore实例。

```
Core管理: 主要有 Add Core(添加核心)， Unload（卸载核心），Rename（重命名核心）， Reload(重 新加载核心) 
Add Core 是添加 core ： 主要是在instanceDir对应的文件夹里生成一个 core.properties 文件
name：给 core 起的名字； 
instanceDir：与我们在配置 solr 到 tomcat 里时的 solr_home 里新建的 core 文件夹名一致；

dataDir:确认 Add Core 时，会在 new_core 目录下生成名为 data 的文件夹 
config：new_core 下的 conf 下的 config 配置文件(solrconfig.xml) 
schema: new_core 下的 conf 下的 schema 文件(schema.xml)
```

**java properties**

Solr在JVM 运行环境中的属性信息，包括类路径、文件编码、jvm内存设置、jdk等信息。

**Thread Dump**

显示Solr Server中当前活跃线程信息，同时也可以跟踪线程运行栈信息。

**Core selector**

可以选择一个SolrCore进行详细操作

**Analysis**

通过此界面可以测试索引分析器和搜索分析器的执行情况

**Dataimport**

可以定义数据导入处理器，从关系数据库将数据导入到Solr索引库中。

默认没有配置，需要手工配置。

**Documents**

通过/update表示更新索引，solr默认根据id（唯一约束）域来更新Document的内容，如果根据id值搜

索不到id域则会执行添加操作，如果找到则更新。

 overwrite="true" ： solr在做索引的时候，如果文档已经存在，就用xml中的文档进行替换

 commitWithin="1000" ： solr 在做索引的时候，每隔1000（1秒）毫秒，做一次文档提交。为了方

便测试也可以在Document中立即提交， 

后添加 “”

 如:name:solr

**Ping**: 查看当前核心库还是否工作的以及响应时间 

**Query**

通过/select执行搜索索引，必须指定“q”查询条件方可搜索。

**Replication**

显示你当前 Core 的副本，并提供 disable/enable 功能

**Schema**

```
展示该 Core 的 shema.xml 文件中的内容
展示该Core的shema数据，如果是用ManagedSchema模式，还可以通过该页面修改，增加，删除schema 的字段
```

**Segments info**

展示底层Lucence的分段信息。

