# Solr数据操作


<!--more-->


## 1. 使用dataimport导入数据库数据

 不作演示了...................

## 2. 查询基本语法

- q:查询字符串

  ```
  q: 查询关键字(如果查询所有使用 *:*)
  ```

- fq:(filter query)过滤查询

  ```
  作用：在q查询符合结果中同时是fq查询符合的 
  请求fq是一个数组（多个值） 
  过滤查询价格从1到120的记录。 
  price:[1 TO 120] 
  也可以使用“*”表示无限，
  例如： 
  120以上：price:[120 TO *] 
  120以下：price:[* TO 120]
  ```

- sort: 排序, desc, asc

- start: 分页显示使用,开始记录下标,从0开始

  rows: 指定返回结果最多有多少条记录,配置start来实现分页

- fl: (field list)指定返回哪些字段内容,用逗号或空格分隔多个

- df:指定默认搜索Field

- wt:  (writer type)指定输出格式，可以有 xml, json, php, phps

- hl: 是否高亮,设置高亮Field,设置格式前缀和后缀

## 3. SolrJ操作Solr

### 3.1 介绍

solrJ是一个用来访问solr的java客户端，提供了索引和搜索的方法（将一些常用的命令封装进去了），通过solrJ提供的API 接口来操作solr服务。![示意图](https://img.zhaojq.top/20260727091649299.png "示意图")

```xml
<dependency> 
    <groupId>org.apache.solr</groupId> 
    <artifactId>solr-solrj</artifactId> 
    <version>7.7.3</version> 
</dependency>
```

### 3.2 基本操作

见示例代码: [solrj-demo](https://gitee.com/ixinglan/solr-demo.git)

### 3.3 高级查询

见示例代码: [solrj-demo](https://gitee.com/ixinglan/solr-demo.git)

- 查询参数

  ```
  查询参数 与 solr管理界面的条件一致 
  	q - 查询字符串，如果查询所有*:* (id:1) 
  	fq - （filter query）过虑查询，过滤条件，基于查询出来的结果 
  	start - 分页开始 
  	rows - 分页查询数据 
  	sort - 排序，格式：sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。 示例：（score desc, price asc）表示先 “score” 降序, 再 “price” 升序，默认是相关性降序。 
  	wt - (writer type)指定输出格式，可以有 xml, json, php, phps。 
  	fl表示索引显示那些field( *表示所有field,如果想查询指定字段用逗号或空格隔开 如：name,price,desc或name price desc 注意：字段是严格区分大小写的 
  	q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或) 
  	hl 是否高亮 ,如hl=true 
  	hl.fl 高亮field ,hl.fl=name,desc 
  	hl.simple.pre 高亮前面的格式 
  	hl.simple.post 高亮后面的格式
  ```

- 检索运算符

  ```\
  1. “:” 指定字段查指定值，如返回所有值*:*
  2. “?” 表示单个任意字符的通配 
  3. “*” 表示多个任意字符的通配（不能在检索的项开始使用*或者?符号）
  4. “~” 表示模糊检索 如:so~N 匹配 N 个编辑距离以内的内容。 
  5. 邻近检索，如检索相隔10个单词的”apache”和”jakarta”，”jakarta apache”~10 
  6. “^” 控制相关度检索，如检索solr apache，同时希望去让”slor”的相关度更加好，那么在其后加 上”^”符号和增量值，即solr^4 apache 
  7. 布尔操作符AND、||
  8. 布尔操作符OR、&& 
  9. 布尔操作符NOT、!、- （排除操作符不能单独与项使用构成查询） 
  10. “+” 存在操作符，要求符号”+”后的项必须在文档相应的域中存在 
  11. [ ] 包含范围检索，如检索某时间段记录，包含头尾，price:[120 TO 600]
  ```

## 4. Springboot访问solr

见示例代码: [springboot-demo](https://gitee.com/ixinglan/solr-demo.git)

注意：需要将 managed-schema 里以下域修改一下类型，String字段改成string,不然写入后，查询出来，getBean(class z)会转换异常

```
<field name="desc" type="text_general"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="text_general"/>
<field name="price" type="pdoubles"/>

修改为：
<field name="desc" type="string"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="string"/>
<field name="price" type="pdouble"/>
```






















