我想要搜索四个数据。
城镇,城市,邮编,国家
通过以下任何方式可以搜索这些结果的最佳方法是什么:
我可以规范化数据,但如果有人搜索“伦敦”,我会得到重复的结果。
如果我只存储了“伦敦,英格兰”,而不仅仅是“伦敦”,那么如果有人搜索“伦敦”,它就不会找到任何结果。
它是一个捕获22。如何存储地址以便在用户搜索时具有灵活性?
答案 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
索引中存在一些冗余,但在大多数情况下它应该是可以忽略的。