0

我的问题与 Solr 和方面查询有关。

我是使用 Solr 并将其与推文记录一起使用的新手。我的目标是绘制源自一个独特点(纬度,经度)的推文数量。我正在获取唯一点(“pgeom”)的单个方面计数结果,但返回的值是乱码,因为它是存储点数据的哈希表示。如何将此哈希转换回可用点?请参阅下面的详细信息。

数据集中的现有字段:

pgom :点地理空间。示例:“pgeom”:“POINT(13.13735209 -4.2170403)”

lon :经度。示例:“lon”:13.13735209

纬度:纬度。示例:“纬度”:-4.2170403}

查询参数示例:

在这里,我试图在所有三个“lat”、“lon”和“pgeom”上使用 facet 字段查询来获取单个推文计数。

?q= %3A &facet=true&fl=lat,lon,pgeom&facet.field=pgeom&facet.field=lat&facet.field=lon

json结果:

“pgeom”方面查询会产生具有相关计数的摄取点的哈希值。其中“lat”和“lon”导致与每个纬度和经度相关联的单独推文计数。我想使用这个“pgeom”哈希来表示来自谷歌地图上某个位置的推文。

点地理空间:

"pgeom":[
    "s",5931,
    "sfju",361,
    "sx",336,
        .. and so on

经度:

"lon":[
    "9.6017436",361,
    "6.807174",195,
    "9.28786844",167,
    "5.4770747",169,
    "9.03439492",112,
         .. and so on

纬度:

"lat":[
    "4.450025",361,
    "9.420721",195,
    "1.29138702",167,
    "8.6851517",169,
    "0.97996991",157,
        .. and so on

响应标头:

"responseHeader":{
"status":0,
"QTime":990,
"params":{
  "facet":"true",
  "fl":"lat,lon,pgeom",
  "indent":"on",
  "start":"200",
  "q":"*:*",
  "facet.field":["lat",
    "lon",
    "pgeom"],
  "wt":"json",
  "rows":"200"}},

回复:

"response":{"numFound":2034074,"start":200,"docs":[
  {
    "pgeom":"POINT(13.13735209 -4.2170403)",
    "lon":13.13735209,
    "lat":-4.2170403},
  {
    "pgeom":"POINT(18.284989 -8.731565)",
    "lon":18.284989,
    "lat":-8.731565},
  {
        .. and so on

如何将“s”、“sxp”、“sfju”等值转换为可读/可用格式,比如“sfju”的 Point(12.041015625, 42.01171875)?

非常感谢您的时间。拉兰

4

2 回答 2

1

您的具体问题的答案是让您将全长地理哈希索引到您想要的精度。无论您选择哪种编程语言,我相信您都可以找到一个代码片段库来来回转换。将其索引为字符串和构面。

然后,您将面临如何以可扩展的方式在地图上绘制可能是荒谬数量的点。您必须使用空间聚类/热图。请参阅http://wiki.apache.org/solr/SpatialClustering

于 2013-09-05T19:07:19.413 回答
1

这个答案是基于大卫的意见和与我的同事的后续讨论。我们发现包含地理位置的 Solr 字段,在我们的例子中是“pgeom”,必须配置为使用基于 PrefixTree 的类。如下页所述:

Solr 空间搜索 - PrefixTree

一旦 Solr 字段(在本例中为“pgeom”字段)配置为使用“location_rpt”类型,该类型使用 PrefixTree (class="solr.SpatialRecursivePrefixTreeFieldType")。

<field name="pgeom"  type="location_rpt"  indexed="true" stored="true"  multiValued="true" />

一旦我们有了包含所有“pgeom”方面结果的列表,就可以使用Geohash上“外部链接”下列出的一些库将每个 geohash 值解码为单独的纬度对。我使用了未列出的库之一python-geohash

>>> import geohash
>>> print 'geohash for 42.5, -4.0:', geohash.encode(42.5,-4.0)
geohash for 42.5, -4.0: ezt1ubzk3npz
>>> print 'coordintate for geohash s', geohash.decode('s')
coordintate for geohash s (22.5, 22.5)
>>> print 'coordintate for geohash sfju', geohash.decode('sfju')
coordintate for geohash sfju (12.041015625, 42.01171875)
>>>

快速交叉检查geohash解码:Example1 Example2

此外,一个新发现是使用Facet.limit来限制响应中的 facet 字段计数。

非常感谢大卫。:)

于 2013-09-05T22:02:07.177 回答