solr实现满足指定距离范围条件的搜索


配置schema.xml

  1  <? xml version="1.0" encoding="UTF-8"  ?>
  2  < schema  name ="aifang-loupan"  version ="1.1" >
  3      < types >
  4          < fieldType  name ="string"  class ="solr.StrField"  sortMissingLast ="true"  omitNorms ="true" />
  5          < fieldType  name ="boolean"  class ="solr.BoolField"  sortMissingLast ="true"  omitNorms ="true" />
  6          < fieldType  name ="integer"  class ="solr.IntField"  omitNorms ="true" />
  7 
  8          < fieldType  name ="int"  class ="solr.TrieIntField"  precisionStep ="0"  omitNorms ="true"  positionIncrementGap ="0" />
  9          < fieldType  name ="float"  class ="solr.TrieFloatField"  precisionStep ="0"  omitNorms ="true"  positionIncrementGap ="0" />
 10          < fieldType  name ="long"  class ="solr.TrieLongField"  precisionStep ="0"  omitNorms ="true"  positionIncrementGap ="0" />
 11          < fieldType  name ="double"  class ="solr.TrieDoubleField"  precisionStep ="0"  omitNorms ="true"  positionIncrementGap ="0" />
 12 
 13          < fieldType  name ="tint"  class ="solr.TrieIntField"  precisionStep ="8"  omitNorms ="true"  positionIncrementGap ="0" />
 14          < fieldType  name ="tfloat"  class ="solr.TrieFloatField"  precisionStep ="8"  omitNorms ="true"  positionIncrementGap ="0" />
 15          < fieldType  name ="tlong"  class ="solr.TrieLongField"  precisionStep ="8"  omitNorms ="true"  positionIncrementGap ="0" />
 16          < fieldType  name ="tdouble"  class ="solr.TrieDoubleField"  precisionStep ="8"  omitNorms ="true"  positionIncrementGap ="0" />
 17 
 18          < fieldType  name ="sint"  class ="solr.SortableIntField"  sortMissingLast ="true"  omitNorms ="true" />
 19          < fieldType  name ="slong"  class ="solr.SortableLongField"  sortMissingLast ="true"  omitNorms ="true" />
 20          < fieldType  name ="sfloat"  class ="solr.SortableFloatField"  sortMissingLast ="true"  omitNorms ="true" />
 21          < fieldType  name ="sdouble"  class ="solr.SortableDoubleField"  sortMissingLast ="true"  omitNorms ="true" />
 22 
 23          < fieldType  name ="date"  class ="solr.TrieDateField"  omitNorms ="true"  precisionStep ="0"  positionIncrementGap ="0" />
 24          < fieldType  name ="tdate"  class ="solr.TrieDateField"  omitNorms ="true"  precisionStep ="6"  positionIncrementGap ="0" />
 25          < fieldtype  name ="ignored"  stored ="false"  indexed ="false"  class ="solr.StrField" />
 26         <fieldtype name="location" class="solr.LatLonType" subFieldSuffix="_d"/>     
 27          < fieldType  name ="text"  class ="solr.TextField"  positionIncrementGap ="100" >
 28                < analyzer  type ="index" >
 29                  < tokenizer  class ="solr.StandardTokenizerFactory" />
 30                  < filter  class ="solr.StopFilterFactory"  ignoreCase ="true"  words ="stopwords.txt"  enablePositionIncrements ="true"   />
 31                  < filter  class ="solr.LowerCaseFilterFactory" />
 32                </ analyzer >
 33                < analyzer  type ="query" >
 34                  < tokenizer  class ="solr.StandardTokenizerFactory" />
 35                  < filter  class ="solr.StopFilterFactory"  ignoreCase ="true"  words ="stopwords.txt"  enablePositionIncrements ="true"   />
 36                  < filter  class ="solr.SynonymFilterFactory"  synonyms ="synonyms.txt"  ignoreCase ="true"  expand ="true" />
 37                  < filter  class ="solr.LowerCaseFilterFactory" />
 38                </ analyzer >
 39          </ fieldType >
 40     
 41      </ types >
 42 
 43      < fields >
 44          < field  name ="loupan_id"  type ="integer"  indexed ="true"  stored ="true"  required ="true" />
 45          < field  name ="city_id"  type ="integer"  indexed ="true"  stored ="false" /> 
 46          < field  name ="loupan_name"  type ="text"  indexed ="true"  stored ="false" />
 47          < field  name ="loupan_pinyin"  type ="string"  indexed ="true"  stored ="false" />
 48          < field  name ="alias_name"  type ="text"  indexed ="true"  stored ="false" />
 49          < field  name ="former_name"  type ="text"  indexed ="true"  stored ="false" />
 50          < field  name ="region_title"  type ="text"  indexed ="true"  stored ="false"   />
 51          < field  name ="region_id"  type ="int"  indexed ="true"  stored ="false" />
 52          < field  name ="sub_region_title"  type ="text"  indexed ="true"  stored ="false" />
 53          < field  name ="sub_region_id"  type ="int"  indexed ="true"  stored ="false" />
 54          < field  name ="regions_string"  type ="string"  indexed ="true"  stored ="false"  multiValued ="true" />
 55          < field  name ="address"  type ="text"  indexed ="true"  stored ="false" />
 56          < field  name ="proxy_address"  type ="text"  indexed ="true"  stored ="false" />
 57          < field  name ="chanquan"  type ="text"  indexed ="true"  stored ="false" />
 58          < field  name ="build_type"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true" />
 59          < field  name ="property_type"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true" />
 60          < field  name ="fitment_type"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true" />
 61          < field  name ="search_kw"  type ="text"  indexed ="true"  multiValued ="true"  stored ="false"   />  
 62          < field  name ="investor"  type ="text"  indexed ="true"  stored ="false" />
 63          < field  name ="company"  type ="text"  indexed ="true"  stored ="false" />
 64          < field  name ="loop_line"    type ="text"   indexed ="true"  stored ="false"   />     
 65          < field  name ="status_sale"  type ="integer"  indexed ="true"  stored ="false" />
 66          < field  name ="status_disp"  type ="integer"  indexed ="true"  stored ="false" />
 67          < field  name ="search_sale"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
 68          < field  name ="jiaofang_date"  type ="sint"  indexed ="true"  stored ="false" />
 69          < field  name ="kaipan_date"  type ="sint"  indexed ="true"  stored ="false" />
 70          < field  name ="price"  type ="sint"  index ="true"  stored ="false" />
 71          < field  name ="baidu_lat"    type ="sfloat"   indexed ="true"  stored ="false" />
 72          < field  name ="baidu_lng"    type ="sfloat"   indexed ="true"  stored ="false" />
 73          < field  name ="lat"   type ="sfloat"   indexed ="true"   stored ="false" />
 74          < field  name ="lng"   type ="sfloat"   indexed ="true"   stored ="false" />
 75          < field  name ="metro_subway_id"   type ="integer"  indexed ="true"   stored ="false"  multiValued ="true"   />
 76          < field  name ="metro_station_id"  type ="integer"  indexed ="true"   stored ="false"  multiValued ="true"   />
 77          < field  name ="metro_enabled"     type ="integer"  indexed ="true"   stored ="false" />
 78          < field  name ="metro_info"        type ="text"   indexed ="true"  stored ="false"  multiValued ="true"   />
 79         < field  name ="loop_line_id"  type ="integer"  indexed ="true"  stored ="false" />
 80         < field  name ="property_type_id"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
 81         < field  name ="build_type_id"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
 82         < field  name ="fitment_type_id"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
 83         < field  name ="developer_id"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
 84         < field  name ="developer_title"  type ="string"  indexed ="true"  stored ="false" />
 85         < field  name ="business_id"  type ="integer"  indexed ="true"  stored ="false" />
 86         < field  name ="business_title"  type ="string"  indexed ="true"  stored ="false" />
 87         < field  name ="loupan_extend_type"  type ="sint"  indexed ="true"  stored ="false"  multiValued ="true" />
 88          < field  name ="trip_fitment_style"  type ="text"  indexed ="true"  stored ="false"   />
 89          < field  name ="trip_feature_recommend"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true"   />
 90          < field  name ="trip_spot"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true"   />
 91          < field  name ="trip_transport"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true"   />
 92          < field  name ="trip_scenic_region"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true"   />
 93          < field  name ="trip_property_service"  type ="text"  indexed ="true"  stored ="false"  multiValued ="true"   />
 94          < field  name ="trip_scenic_spot"  type ="text"  indexed ="true"  stored ="false" />
 95          < field  name ="trip_created"  type ="sint"  indexed ="true"  stored ="false"   />
 96          < field  name ="is_trip"  type ="int"  indexed ="true"  stored ="false"   />
 97          < field  name ="level"  type ="sint"  indexed ="true"  stored ="false" />
 98          < field  name ="loupan_pv_day"  type ="sint"  indexed ="true"  stored ="false"   />
 99          < field  name ="operator_ids"  type ="integer"  indexed ="true"  stored ="false"  multiValued ="true" />
100          < field  name ="operator_names"  type ="string"  indexed ="true"  stored ="false"  multiValued ="true" />
101          < dynamicField  name ="*_grade"  type ="sint"  indexed ="true"  stored ="false"   />
102          < field  name ="updated"  type ="sint"  indexed ="true"  stored ="false"   />  
103          < field  name ="news_id"  type ="int"  indexed ="true"  stored ="false"   />  
104          < field  name ="news_update"  type ="sint"  indexed ="true"  stored ="false"   />  
105          < field  name ="rank"  type ="sfloat"  indexed ="true"  stored ="false"   />
106          < field  name ="sale_order"  type ="sint"  indexed ="true"  stored ="false"   />
107          < field  name ="vip_order"  type ="string"  indexed ="true"  stored ="false"   />
108          < field  name ="kaipan_order"  type ="sint"  indexed ="true"  stored ="false" />
109          < field  name ="created"  type ="sint"  indexed ="true"  stored ="false"   />  
110         <field name="latlng" type="location" indexed="true" />
111          <dynamicField name="*_d" type="double" indexed="true" stored="true"/>
112      </ fields >
113 
114      < uniqueKey >loupan_id </ uniqueKey >
115      < defaultSearchField >search_kw </ defaultSearchField >
116      < solrQueryParser  defaultOperator ="AND" />
117  </ schema >

 

在提交数据时的格式为:(纬度,经度:以字符串的方式提交给solr)

<field name="store">45.17614,-93.87341</field>  <!-- Buffalo store -->
<field name="store">40.7143,-74.006</field>     <!-- NYC store -->
<field name="store">37.7752,-122.4232</field>   <!-- San Francisco store -->

 

 例如要查寻距离纬度经度(31.254982,121.47501)5km的所有满足条件的楼盘:

 

http://192.168.181.140:8487/solr/loupan/select/?q=city_id:11&fq={!geofilt pt=31.254982,121.47501 sfield=latlng d=5}

查找满足指定距离的结果集,并按照距离由近到远排序

http://192.168.181.140:8487/solr/loupan/select/?q=*:*&fq={!geofilt}&pt=31.2367,121.501&sfield=latlng&d=5&sort=geodist()+asc

 

 

参考:

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM