SOLR 中有一批document,如下:
id:1, year:2008, name:Test1
id:2, year:2008, name:Test1
id:3, year:2008, name:Test2
id:4, year:2009, name:Test1
...
现在有需求是查询 连续5年内,**同一name的facet下count在1-6之间的所有结果集**
1、如何实现连续5年内?
2、facet在pivot后如何针对count进行范围查询?
SOLR 中有一批document,如下:
id:1, year:2008, name:Test1
id:2, year:2008, name:Test1
id:3, year:2008, name:Test2
id:4, year:2009, name:Test1
...
现在有需求是查询 连续5年内,**同一name的facet下count在1-6之间的所有结果集**
1、如何实现连续5年内?
2、facet在pivot后如何针对count进行范围查询?
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要解决这个问题,我们可以使用 Solr 的 Facet 和 Pivot 功能。下面我将解释如何分别处理这两个步骤。
首先,我们需要创建一个索引来存储这些数据。例如:
<field type="string" indexed="true" store="true" multiValued="false">
<analyzer>
<tokenizer class="standard"/>
<filter class="lowercase"/>
</analyzer>
</field>
<field type="integer" indexed="true" store="true" multiValued="false">
<analyzer>
<tokenizer class="standard"/>
<filter class="lowercase"/>
</analyzer>
</field>
然后,你可以使用以下片段添加索引到 Solr:
solr.sh add -i test_index -d data/data
接下来,为了获取连续5年的文档,你需要创建一个新的索引,并在其中添加一些示例数据:
solr.sh add -i test_index_2008 -d data/data
solr.sh add -i test_index_2009 -d data/data
这样,你就会有两个索引,分别对应2008年和2009年的数据。
对于每个索引,我们都需要执行 Facet。这可以通过以下片段完成:
solr.sh facet -f id,pivot:year,facet:count -i test_index_2008 -d data/data
solr.sh facet -f id,pivot:year,facet:count -i test_index_2009 -d data/data
这个命令会生成两个新的索引,分别对应2008年和2009年的文档。接着,我们可以运行以下命令以查看这些新生成的索引:
solr.sh view -i test_index_2008 -p /data/data/facet_test_index_2008.json
solr.sh view -i test_index_2009 -p /data/data/facet_test_index_2009.json
这将显示每个索引中包含的数据及其相应的计数。
最后,我们需要筛选出满足特定条件的结果。这里是一个例子,我们将筛选出连续5年内,同一个名称的文档数量在1至6之间的结果:
solr.sh facet -f id,pivot:year,facet:count -i test_index_2008 -d data/data -query "year:[2008-2007] AND count:[1-6]"
这个查询将返回与指定条件匹配的所有文档。注意,这里的查询字符串是以逗号分隔的,因此必须确保你的条件参数正确设置。
以上就是在 Solr 中实现连续5年内,同一name的facet下count在1-6之间的所有结果集的方法。如果你需要进一步的帮助或有任何其他疑问,请随时提问!