Solr数据操作
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服务。
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.7.3</version>
</dependency>
3.2 基本操作
见示例代码: solrj-demo
3.3 高级查询
见示例代码: solrj-demo
-
查询参数
查询参数 与 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
注意:需要将 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"/>