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

来源:互联网 发布:电脑视频剪切软件 编辑:程序博客网 时间:2024/06/05 18:15

配置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
0 0