在Solr搜索位置

时间:2012-08-01 08:47:44

标签: search solr street-address

我想要搜索四个数据。

城镇,城市,邮编,国家

通过以下任何方式可以搜索这些结果的最佳方法是什么:

  • 英国伦敦
  • 英国威尔特郡斯温顿
  • 英国威尔特郡
  • 英国
  • 威尔特
  • 斯温

我可以规范化数据,但如果有人搜索“伦敦”,我会得到重复的结果。

如果我只存储了“伦敦,英格兰”,而不仅仅是“伦敦”,那么如果有人搜索“伦敦”,它就不会找到任何结果。

它是一个捕获22。如何存储地址以便在用户搜索时具有灵活性?

3 个答案:

答案 0 :(得分:0)

最好的方法是使用solr空间搜索功能http://wiki.apache.org/solr/SpatialSearch/,但这需要访问映射数据服务,该服务可以返回该位置的纬度/经度并将其与solr记录一起存储。然后对搜索进行相同的查找以获得纬度/经度,并且与文本搜索位置相比,您将能够进行半径搜索并获得更准确的结果。

答案 1 :(得分:0)

最好遵循上一个答案的建议。 你应该添加一个字段位置 并配置schema.xml

已添加到<fieldType>

部分
 <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

已添加到<field>

部分
<field name="location" type="location" indexed="true" stored="true" required="true" />

 <dynamicField name="*_coordinate"  type="tdouble" indexed="true"  stored="false"/> 

现在更新你的索引solr / dataimport?command = delta-import

可以查询&amp; q = &amp; fq = {!geofilt pt = 45.15,-93.85 sfield = store d = 5}

http://wiki.apache.org/solr/SpatialSearch http://wiki.apache.org/solr/SpatialSearchDev

答案 2 :(得分:0)

如果您没有可用的地理空间数据,可以尝试Herarchical Faceting。它以特定方式索引数据,允许层次结构内的查询,例如:

Document: England > London > Chelsea

Index: 0/England, 1/England/London, 2 England/London/Chelsea

Query: facet.field = category, facet.prefix = 1/London, facet.mincount = 1

索引中存在一些冗余,但在大多数情况下它应该是可以忽略的。