Solr教程:练习二 - 索引Films数据和分面探索

本练习将使用电影数据集,重点探索Solr的分面(Faceting)功能,这是构建强大搜索界面的关键特性。

集合设置

1. 创建Films集合

使用_default配置集创建一个新的”films”集合:

1
bin/solr create -c films --shards 2 --replication-factor 2

这将创建一个具有2个分片和2个副本的集合,提供良好的容错性。

模式准备

2. 创建必要的字段

创建”name”字段:

1
2
3
4
5
6
7
8
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

添加一个捕获所有字段的复制字段:

1
2
3
4
5
6
curl -X POST -H 'Content-type:application/json' --data-binary '{
"add-copy-field" : {
"source":"*",
"dest":"_text_"
}
}' http://localhost:8983/solr/films/schema

索引Films数据

3. 导入数据

1
bin/solr post -c films example/films/films.json

这将索引包含多部电影信息的JSON文件。

分面技术探索

字段分面(Field Facets)

查询所有文档并按流派分面:

1
curl "http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.field=genre_str"

限制分面结果(只显示至少有200部电影的流派):

1
curl "http://localhost:8983/solr/films/select?q=*:*&facet.field=genre_str&facet.mincount=200&facet=on&rows=0"

范围分面(Range Facets)

按发布日期创建范围分面:

1
2
3
4
5
6
curl "http://localhost:8983/solr/films/select?q=*:*&rows=0\
&facet=true\
&facet.range=initial_release_date\
&facet.range.start=NOW/YEAR-25YEAR\
&facet.range.end=NOW\
&facet.range.gap=%2B1YEAR"

这将显示过去25年中每年发布的电影数量。

透视分面(Pivot Facets)

创建流派和导演的透视分面:

1
curl "http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=true&facet.pivot=genre_str,directed_by_str"

这将显示每个流派中各个导演的电影数量,帮助分析导演的专长领域。

分面的实际应用

1. 导航式搜索界面

分面允许用户通过点击类别来细化搜索结果,例如:

  • 按流派筛选(动作、喜剧、剧情)
  • 按年份范围筛选
  • 按导演筛选

2. 数据分析

通过分面统计,可以快速了解数据分布:

  • 哪个流派的电影最多?
  • 电影产量的年度趋势如何?
  • 哪些导演最高产?

3. 动态筛选器

结合多个分面字段,创建复杂的筛选器组合:

1
curl "http://localhost:8983/solr/films/select?q=*:*&fq=genre_str:Drama&fq=directed_by_str:*Spielberg*&facet=true&facet.field=initial_release_date"

高级分面技巧

分面排序

按计数降序排序(默认):

1
facet.sort=count

按索引顺序(字母顺序)排序:

1
facet.sort=index

分面限制

限制返回的分面值数量:

1
facet.limit=10

分面偏移

跳过前N个分面值:

1
facet.offset=5

清理

删除集合(如需要):

1
bin/solr delete -c films

关键学习要点

  • 分面类型:掌握字段分面、范围分面和透视分面
  • 分面参数:了解如何控制分面输出
  • 实际应用:理解分面在搜索界面中的作用
  • 性能考虑:分面可能消耗资源,需要合理使用

下一步

  • 尝试更复杂的分面组合
  • 探索JSON Facet API以获得更强大的功能
  • 继续练习三,使用自己的数据

相关资源

© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero