1

我有四个要搜索的数据。

城镇、城市、邮政编码、国家

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

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

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

如果我只存储了“London, England”,而不仅仅是“London”,那么如果有人搜索“London”,它将找不到任何结果。

它是一个catch22。当用户搜索时,一个存储地址应该如何灵活?

4

3 回答 3

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

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

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

于 2012-09-13T21:04:02.373 回答
0

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

于 2012-08-01T17:03:23.077 回答
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

索引中有一些冗余,但在大多数情况下应该可以忽略不计。

于 2012-09-13T21:28:21.143 回答