2012-08-01 71 views
1

我有四条数据可供搜索。在Solr搜索位置

镇,市,邮编,国家

什么是我可以让这些结果搜索通过以下任一方式的最佳途径:

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

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

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

它的一个catch22。在用户搜索时,应该如何存储地址以实现灵活性?

+1

如果您有“伦敦,英格兰”索引,搜索“伦敦”将匹配。你可以添加一些你有的数据样本,而不仅仅是查询吗? – Fuxi 2012-08-01 10:49:24

回答

0

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

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?命令=德尔塔进口

可以让您的查询& Q = :{!geofilt PT = 45.15,-93.85元数=店d = 5} & FQ =

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

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 

有一个在指数一定的冗余,但它应该是在多数情况下可以忽略不计。