2

我希望就设计 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}
    ]
}

标签需要在索引时分配各种权重(权重在查询之间不会改变)。针对索引的搜索包括针对与 lat/lng 对特定距离内的所有文档的名称和标签的文本搜索。例如,在 9.876/5.432 的 5000 米范围内搜索:“Sample example3”。

在这样的搜索中,具有更多标签匹配和与标题匹配的文档应该排名更高(不确定 Solr 是否默认这样做),同时仍然考虑标签权重(这使得某个标签可能导致文档排名非常高在搜索中,因为它的重量)。

我过去曾使用 Solr 来执行全文搜索,并且我已经使用过它的地理空间功能。我来自 Sphinx 背景,但我认为 Solr 是一个更强大的产品,可以满足我的大部分需求。我只需要一些帮助来设计一个可以有效地进行全文+加权+地理空间的索引。任何意见是极大的赞赏!

4

1 回答 1

1

地理空间多值数据可通过 Solr 开箱即用模式中的 location_rpt 轻松处理。

这里比较棘手的部分是加权标签。作为第一次切割,我将索引 3 个字段,tags05 tags10 tags15,每个字段都有 3 个单独的查询时间提升(通过 edismax 的 qf 参数),分别为 0.5、1.0 和 1.5。这是一种离散化方法,根据您拥有的桶数(此处显示 3 个),您会降低一些权重保真度。如果可以,请避免 Solr 4 JOIN 查询;他们通常很慢。由于数据被拆分,IDF 分数会有点差,因此您可能想为这些不考虑 IDF 的字段尝试不同的相似性实现。

于 2013-06-18T17:59:13.293 回答