0

假设我有以下示例层次结构:

  • 我们
    • 密歇根州
      • 底特律
      • 大急流城
      • 兰辛
    • 明尼苏达
      • 大急流城
      • 明尼阿波利斯
      • 圣保罗
    • 俄亥俄州
      • 哥伦布
      • 大急流城
      • 桑达斯基

我看到了两种方法可以索引带有前缀术语的“密歇根州大急流城”文档:

XFIRSTLEVELus
XSECONDLEVELmichigan
XTHIRDLEVELgrandrapids

或者

XFIRSTLEVELus
XSECONDLEVELus_michigan
XTHIRDLEVELus_michigan_grandrapids

我倾向于使用第二种方法,认为它会返回更直观的结果。也就是说,包含密歇根州大急流城搜索条件的搜索不太可能包含来自明尼苏达州和俄亥俄州的文档。

然而,这种方法的两个方面困扰着我。首先,为层次结构的每个级别创建和维护术语前缀感觉是错误的。其次,值的串联似乎是使用权重的替代品。

那么,用术语前缀表示层次结构的最佳方式是什么?

4

1 回答 1

1

与所有这些事情一样,最好考虑如何使用数据,而不是“最好”的存储方式。

过去,我将您描述的位置数据存储为 URL 路径,将地名转换为 slug,因此您上面的示例如下所示:

us
us/michigan
us/michigan/detroit
us/michigan/grand-rapids
us/michigan/lansing
us/minnesota
us/minnesota/grand-rapids
us/minnesota/minneapolis
us/minnesota/st-paul
us/ohio
us/ohio/columbus
us/ohio/grand-rapids
us/ohio/sandusky

给每个文档一个带有这些路径之一的前缀词,并使用精确词搜索来获取仅位于某个位置的所有文档 ( location:us/minnesota/minneapolis) 或使用通配符搜索来获取某个位置的所有子项 ( location:us/minnesota/*)

这可能是也可能不是“最佳”解决方案,但它可能适用于某些应用程序:)

于 2011-11-06T21:31:08.137 回答