Solr入门(二)
重启Solr
solr start -c -p 8983 -s ../example/cloud/node1/solr
solr start -c -p 7574 -s ../example/cloud/node2/solr -z localhost:9983
创建新数据集
即将演示的特性:field guessing。
这种field guessing特性的模式被称为:Schemaless。
什么是schema?
我想到了这三个词:模式,范式,配置
solr 的 schema 用来定义属性和属性类型,帮助solr去索引数据
创建数据集
使用configSet 创建数据集,例子中使用默认的configset创建,这种不建议在生产环境,不过我们这里主要是测试。
-s 2 -rf 2表示把数据集分成两个分片,每个分片有两个副本。
准备为Films数据集使用Schemaless特性
Schemaless这个特性,就是你不需要指定一个schema来让solr建立索引,让solr猜你要为哪些关键词数据建索引等信息。
当然这里猜也是基于默认schema,默认分词算法的。
之所以不建议在生产环境直接使用这个特性,就是不能保证猜的每次都是对的。当你的大量数据在线上被使用,然而用户搜索的时候,solr猜关键词猜错了,就会很麻烦,需要重新建立索引。
总之,不要过分相信工具提供的特性,solr提供schema是有原因的,需求总是复杂和无尽的。
数据类型修正
官网举了个例子来说明Schemaless这个事:
比如如果为电影名建索引时,遇到的第一个电影的名字叫.45,那么solr可能认为电影名(names)字段的类型是float,很明显这是错的。需要修正为string。
使用Schema API:
curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema
使用AdminUI
设置schema索引所有字段
Schema API:
curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field" : {"source":"*","dest":"_text_"}}' http://localhost:8983/solr/films/schema
AdminUI:
上述做的事情是:将所有字段属性复制到_text_中。
这个拷贝如果是全量,在生产环境数据量大的时候会很慢。
建立Film的数据索引
去AdminUI,搜索可以看到1100条结果:
Faceting
facet这个单词谷歌翻译了下,翻译作"面"。有方面或者切面的意思。具体什么意思呢?查一下就清楚了:
如上的查询条件后,可以看到返回的是一个聚合后的结果,统计每种类型的电影的数量。
使用mincount参数可以限制查询数量大于200的值
Range Facets
范围查询,比如查询时间范围
Pivot Facets
按电影类别分类,再统计类别基础上各导演的电影数。
http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=on&facet.pivot=genre_str,directed_by_str
看一下结果就更明白了
总结:
1、介绍了Schema API的使用
2、使用facet进行不同维度查询
查范围、分类、各个分类下的总数
收尾
清理数据集