<doc>
...
<arr name="occupiedDays"> -- multivalued range field
<range>1 TO 10</range>
<range>5 TO 15</range>
</arr>
...
</doc>
我之所以这么做是因为它比拥有所有数字要轻得多,当然。 为了清楚起见,我想避免在solr中使用它:
<doc>
...
<arr name="occupiedDays"> -- multivalued int field
<str>1</str>
<str>2</str>
<str>3</str>
<str>4</str>
<str>5</str>
<str>6</str>
<str>7</str>
<str>8</str>
<str>9</str>
<str>10</str>
</arr>
...
</doc>
然后对此范围字段执行范围查询,例如:fq = -occupiedDays:[5 TO 30]
有人有任何想法吗?我在互联网上询问和搜索,似乎solr不支持这个。
任何帮助都会非常有用!谢谢你提前。
费德里科
答案 0 :(得分:0)
实际上,你没有太多选择:
要么搜索需要此字段,在这种情况下,映射需要是显式的(Lucene / Solr是反向索引,这意味着每个单个字段实例,它存储包含此字段实例的文档列表,
您只需要存储这个字段,在这种情况下,我最好的建议是将其存储在Solr之外。
您的字段名称让我认为您正在开发一些可用性系统。您可能对此问题感兴趣:
答案 1 :(得分:0)
为什么不将数据预处理到存储桶中,只将最终结果提交给SOLR。定义固定数量的存储桶,一次增加10个,再加上一个额外的存储桶,用于超出该范围的数量。例如,你可以有3个10个桶,分别是1-10,11-20,21-30和31个或更多。然后,通过将ocuppiedDays落入桶中的每个记录增加一个桶来计算每个桶中的记录,或者通过将每个记录的occupiedDays添加到适当的桶中来总结天数。取决于您想要对数据做什么,正确的解决方案甚至可以在不同的领域中以两种方式进行。
顺便说一句,1024M的RAM并不是一个很大的SOLR数据库。通常,SOLR将整个索引存储在RAM中,当您执行搜索查询时,它还会在RAM中缓存结果集的副本,其中包括结果集中的任何非索引字段。检查solrconfig.xml中的缓存配置,因为您可能缓存了太多数据。此外,如果您有大量未编制索引的字段,请考虑将该信息放在单独的键值存储中,以便它们不会占用RAM进行缓存。