【发布时间】:2015-10-25 23:37:29
【问题描述】:
我们被要求在我们的一个站点中实施一项新功能,经过一定量的研究后,我们认为我们无法在 Solr 中解决此问题。但我们简要地想仔细检查一下;
假设我们将 Companies 存储在索引中。每家公司都可以有多个开放期。一个周期被格式化为“开始日(日期)”到“结束日(日期)”。在网站上,我们允许访问者搜索某个时期,并向他们展示与公司时期中至少一天匹配的公司。到目前为止一切顺利,我们已经使用空间搜索实现了这一点; (https://people.apache.org/~hossman/spatial-for-non-spatial-meetup-20130117/)。
我们的字段(类型)定义:
<fieldType name="dayrange" class="solr.SpatialRecursivePrefixTreeFieldType" geo="false" worldBounds="ENVELOPE(16071, 20088, 20088, 16071)" distErrPct="0" maxDistErr="1" units="degrees"/>
<field name="periods" type="dayrange" indexed="true" stored="true" multiValued="true" required="false"/>
注意:worldBounds 基于纪元以来的天数。开始日是 2014 年 1 月 1 日(自纪元以来 16071 天),结束日是 2024 年 12 月 31 日(自纪元以来 20088 天)。
每当我们想要搜索时,我们都会使用 contains 方法:fq=periods:"INTERSECTS(16071 16733 16739 20088)"
就像我说的,到目前为止一切都很好。这已经在起作用了。现在他们要求我们实现两个新功能;
- 允许根据匹配天数排序
- 显示匹配天数(该公司在您搜索的 14 天中的 10 天开业)
第二个功能可以也可以在 Solr 之外实现(例如在我们的应用程序中)。但是,如果可以按匹配天数排序,那么它可能也可以返回那个数字?!出于性能原因,我们更喜欢在 Solr 上实现排序。但是现在我们找不到一个很好的解决方案来实现这一点。 谁能帮助我们找到正确的解决方案,或者可以确认这在原生 Solr 4.x 中是不可能的?!
如果有任何帮助,我将不胜感激。
【问题讨论】:
标签: solr spatial solr4 date-range