我希望就设计Solr索引的最佳方法提出一些建议,其中每个文档都有多个标签以及多个lat / lng对。
示例文档的JSON表示:
Document {
id: 123,
name: "Sample Doc",
tags: [
{tag:"example1", weight:0.5},
{tag:"example2", weight:1.0},
{tag:"example3", weight:1.5}
],
locations: [
{lat:1.234, lng:5.678},
{lat:9.876, lng:5.432}
]
}
标记需要在索引时分配各种权重(权重在查询之间不会改变)。对索引的搜索包括针对名称的文本搜索以及与纬度/经度对相距特定距离内的所有文档的标记。例如,在9.876 / 5.432的5000米范围内搜索:“Sample example3”。
在这样的搜索中,具有更多标记匹配和与标题匹配的文档应该排名更高(不确定Solr是否默认),同时仍然考虑标记权重(这使得某个标记可能导致文档由于它的重量,在搜索中排名很高。
我过去曾使用Solr进行全文搜索,并且我已经玩过它的地理空间功能。我来自Sphinx背景,但我认为Solr是一款更强大的产品,可满足我的大多数需求。我只需要一些帮助来设计一个可以有效地完成全文+加权+地理空间的索引。非常感谢任何建议!
答案 0 :(得分:1)
地理空间多值数据可以通过Solr的开箱即用架构中的location_rpt轻松处理。
这里比较棘手的部分是加权标签。作为第一个剪辑,我将索引3个字段,tags05 tags10 tags15,每个字段分别有0.5,1.0和1.5的3个单独的查询时间提升(通过edismax的qf param)。这是一种离散化方法,根据您拥有的桶数量,您可以放松一些重量保真度(此处显示3个)。如果可以,请避免Solr 4 JOIN查询;他们往往很慢。由于数据被拆分,IDF得分会有点不好,所以你可能想对这些不考虑IDF的字段尝试不同的相似性实现。