【问题标题】:One-to-Many Geospatial Search Index Design in SolrSolr中的一对多地理空间搜索索引设计
【发布时间】:2013-06-18 14:15:17
【问题描述】:

我希望就设计 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 是一个更强大的产品,可以满足我的大部分需求。我只需要一些帮助来设计一个可以有效地进行全文+加权+地理空间的索引。非常感谢任何建议!

【问题讨论】:

  • 您有什么特别的问题吗?或者只是寻找有关如何实现您的要求的一般建议?
  • Moreso 概念性建议,或基于我的 JSON 示例中的数据的示例实现。

标签: mysql solr lucene indexing geospatial


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2013-05-05
    相关资源
    最近更新 更多