我的问题与Solr和facet查询有关。
我是新手使用Solr并将其与推文记录一起使用。我的目标是绘制源自唯一点(纬度,经度)的推文数量。我获得了唯一Point(“pgeom”)的单个facet计数结果,但返回的值是乱码,因为它是存储的Point数据的哈希表示。如何将此哈希转换回可用的Point?请参阅下面的详细信息。
pgeom:Point geo spacial。示例:“pgeom”:“POINT(13.13735209 -4.2170403)”
lon:经度。示例:“lon”:13.13735209lat:纬度。示例:“lat”: - 4.2170403}
这里我试图在所有三个“lat”,“lon”和“pgeom”上使用facet字段查询来获取单个推文计数。
?Q = %3A &安培;小面=真安培; FL =纬度,经度,pgeom&安培; facet.field = pgeom&安培; facet.field =纬度&安培; facet.field = LON
“pgeom”facet查询会产生具有关联计数的摄取点的哈希值。其中“lat”和“lon”导致与纬度和经度中的每一个相关联的个别推特计数。我想用这个“pgeom”哈希表示来自谷歌地图上某个位置的推文。
point geo spacial:
"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)?
非常感谢你的时间。 拉篮
答案 0 :(得分:1)
您的具体问题的答案是您将全长geohashes索引到您想要的精度。无论您选择何种编程语言,我都相信您可以找到一个代码片段库来转换回来。向前。将其索引为字符串和方面。
然后,您将面临如何以可扩展的方式在地图上绘制可能是荒谬的点数的方法。您将不得不使用空间聚类/热图。见http://wiki.apache.org/solr/SpatialClustering
答案 1 :(得分:1)
这个答案是基于David的意见以及与同事的后续讨论。我们发现包含地理位置的Solr字段(在我们的例子中是“pgeom”)必须配置为使用基于PrefixTree的类。如以下页面所述:
Solr Spatial Search - PrefixTree
一旦Solr字段(在本例中为“pgeom”字段)配置为使用“location_rpt”类型,它使用PrefixTree(class =“solr.SpatialRecursivePrefixTreeFieldType”)。
<field name="pgeom" type="location_rpt" indexed="true" stored="true" multiValued="true" />
一旦我们得到包含所有“pgeom”facet结果的列表,就可以使用Geohash上“外部链接”下列出的一些库将每个geohash值解码为单独的lat lon对。我使用了一个未列出的库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来限制响应中的构面字段数。
非常感谢大卫。 :)