我有四个要搜索的数据。
城镇、城市、邮政编码、国家
我可以通过以下任何一种方式使这些结果可搜索的最佳方式是什么:
- 伦敦,英国
- 英格兰威尔特郡斯温顿
- 英格兰威尔特郡
- 英国
- 威尔特郡
- 斯温顿
我可以规范化数据,但如果有人简单地搜索“伦敦”,我会得到重复的结果。
如果我只存储了“London, England”,而不仅仅是“London”,那么如果有人搜索“London”,它将找不到任何结果。
它是一个catch22。当用户搜索时,一个存储地址应该如何灵活?
我有四个要搜索的数据。
城镇、城市、邮政编码、国家
我可以通过以下任何一种方式使这些结果可搜索的最佳方式是什么:
我可以规范化数据,但如果有人简单地搜索“伦敦”,我会得到重复的结果。
如果我只存储了“London, England”,而不仅仅是“London”,那么如果有人搜索“London”,它将找不到任何结果。
它是一个catch22。当用户搜索时,一个存储地址应该如何灵活?
最好遵循上一个答案的建议。您应该添加一个字段位置并配置 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
最好的方法是使用 solr 空间搜索功能http://wiki.apache.org/solr/SpatialSearch/但这需要访问地图数据服务,该服务可以返回位置的纬度/经度并将其存储在索尔记录。然后对搜索进行相同的查找以获取纬度/经度,与在位置上的文本搜索相比,您将能够进行半径搜索并获得更准确的结果。
如果您没有可用的地理空间数据,您可以尝试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
索引中有一些冗余,但在大多数情况下应该可以忽略不计。