Solr部署,连接mysql,实现模糊查询功能,以及按照距离排序功能
2018-02-03 20:14
1136 查看
先来谈谈本人奋战3天趟过的坑
版本选择问题:第一次入坑,选择的是JDK1.8+tomcat8.5+solr6.6,网上搜索各种教程,最后给我来了个JDK版本不匹配。这不是逗我呢!
第二次入坑,果断降低solr的版本,选择的是,JDK1.8+tomcat8.5+solr4.10.0,最终又是以失败告终,具体原因没搞明白!
第三次尝试,按照网上的说法,抛弃tomcat,最终选择的是JDK1.8+solr4.10.0,完美运行。(感谢以下网址提供的帮助http://www.cnblogs.com/luxiaoxun/p/4442770.html)
资源下载问题:集成过程中,到处寻找资源,浪费了很多时间,因此楼主汇总了下本次集成所需要的所有资源。点我下载所有资源
目录
基础solr功能部署solr与mysql数据库集成
全局搜索,模糊查询(实现类似淘宝的搜索框)
按照距离(经纬度)远近排序功能的实现
solr与java的集成,springboot系统查询solr数据
基础solr功能部署
在网上下载solr4.10.0版本解压至本地文件夹(楼主的位置是C:\D\solr)
cmd进入 C:\D\solr\solr-4.10.0\example,执行java -jar start.jar
访问http://localhost:8983/solr (到此完美部署成功)
连接mysql数据库
1.修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\solrconfig.xml在《requestHandler name=”/select” class=”solr.SearchHandler”》前面上加上一个dataimport的处理的Handler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
2 在同目录下添加data-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/chuangzzhl" user="root" password="123456" batchSize="-1"/> <document> <entity name="t_zzhl_wx_user_info" pk="wx_user_info_id" query="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no,BIRTH_YEAR from t_zzhl_wx_user_info" deltaImportQuery="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no, BIRTH_YEAR from t_zzhl_wx_user_info where id='${dataimporter.delta.wxUserInfoId}'" deltaQuery="select wx_user_info_id,country,city,province, gender,language,nick_name,user_no, BIRTH_YEAR from t_zzhl_wx_user_info where to_char(update_time,'yyyy-mm-dd hh24:mi:ss')> '${dataimporter.last_index_time}'"> <field column="wx_user_info_id" name="wxUserInfoId"/> <field column="country" name="country"/> <field column="city" name="city"/> <field column="province" name="province"/> <field column="gender" name="gender"/> <field column="language" name="language"/> <field column="nick_name" name="nickName"/> <field column="user_no" name="userNo"/> <field column="BIRTH_YEAR" name="birthYear"/> 4000 </entity> </document> </dataConfig>
说明:
dataSource是数据库数据源。
Entity就是一张表对应的实体,pk是主键,query是查询语句。
Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字。
3修改同目录下的schema.xml,这是Solr对数据库里的数据进行索引的模式(添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应。)
备注:第一行的“id”是solr默认的主键字段,且类型是string类型,单和我的模型不一样咋办?楼主的id是“wxUserInfoId”,且是Long类型。
修改方法,注释掉默认的id,新增一行“wxUserInfoId”,修改uniqueKey标签的值为“wxUserInfoId”
<uniqueKey>wxUserInfoId</uniqueKey> <!-- <uniqueKey>id</uniqueKey> <field name="id" type="String" indexed="true" stored="true" required="true" multiValued="false" /> --> <field name="wxUserInfoId" type="tlong" indexed="true" stored="true" required="true" multiValued="false" /> <field name="country" type="string" indexed="true" stored="true" /> <field name="city" type="string" indexed="true" stored="true" /> <field name="province" type="string" indexed="true" stored="true" /> <field name="gender" type="string" indexed="true" stored="true" /> <field name="language" type="string" indexed="true" stored="true" /> <field name="nickName" type="string" indexed="true" stored="true" /> <field name="userNo" type="string" indexed="true" stored="true" /> <field name="birthYear" type="string" indexed="true" stored="true" />
4 修改同目录下的elevate.xml(备注:如果修改主键类型,才需要做这一步,否则可以跳过)
注释掉下面两行
<doc id="MA147LL/A" /> <doc id="IW-02" exclude="true" />
5 拷贝mysql-connector-java-5.1.22-bin.jar和solr-dataimporthandler-4.10.0.jar和solr-dataimporthandler-extras-4.10.0.jar到C:\D\solr\solr-4.10.3\example\solr-webapp\webapp\WEB-INF\lib。一个是mysql的java驱动,另两个在C:\D\solr\solr-4.10.0\dist目录里,是org.apache.solr.handler.dataimport.DataImportHandler所在的jar。
6 重启Solr。如果配置正确就可以启动成功。
全局搜索,模糊查询(实现类似与淘宝的搜索框)
1.模糊查询是利用分词器去做的2下载分词器所需jar包(IKAnalyzer2012FF_u1.jar),将jar包放入C:\D\solr\solr-4.10.0\example\solr-webapp\webapp\WEB-INF\lib
3 修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\schema.xml文件
楼主这边选择gender和nickName这两个字段作为查询条件,这两个字段是在之前新加的。修改了type的值
searchKeywords是自己随意定义的一个名字,只要不和已经存在的字段重名就可以,用于后面模糊查询时的参数key
<!-- 修改 --> <field name="gender" type="text_ik" indexed="true" stored="true" /> <field name="nickName" type="text_ik" indexed="true" stored="true" /> <!-- 新增 --> <field name="searchKeywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="gender" dest="searchKeywords"/> <copyField source="nickName" dest="searchKeywords"/> <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
4 重启Solr。如果配置正确就可以启动成功。
按照距离排序功能的实现
1 既然用到距离,就需要涉及到经纬度相关信息,因此,现在数据库增加一个字段LAT_LON VARCHAR类型2 修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\data-config.xml文件(按照红色框框标注的新增)
3 修改C:\D\solr\solr-4.10.0\example\solr\collection1\conf\schema.xml文件(新增字段latLon)
<!-- 新增字段 --> <field name="latLon" type="location" indexed="true" stored="true"/> <!-- 默认就已经存在,不需要新增 --> <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
4 重启Solr。如果配置正确就可以启动成功。
5 页面查询操作
6 java后台查询操作(参数)
//经纬度排序参数设置 SolrQuery query = new SolrQuery(); query.add("fq","{!geofilt}"); query.add("spatial","true"); query.add("fl","*,dist:geodist()");//设置,距离比较完成之后,返回相差的距离,数据放在dist字段中 query.add("sort","geodist() asc");//距离排序 query.add("pt","45.17614,-93.87341");//此处放发起查询请求的用户的位置 query.add("sfield","latLon");//数据库中存放用于比较的经纬度的字段 query.add("d","10000");//设置返回多少距离内的用户(具体单位是啥,还哦不太清楚)
java后台系统查询solr数据(备注:此java项目是springboot项目)
1 封装一个查询solr数据的基本方法package com.chuang.foundation.solr; import java.util.List; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** * * Copyright © 2018 Chuang Network studio. Tech Ltd. All rights reserved. * * https://ourtool.cn * * @Description: TODO * * @author quan * @param <T> * * @Date 2018年2月3日 上午10:06:50 */ @Service public class SolrService<T> { private String solrUrl = http://localhost:8983/solr/; //solr系统地址: private String solrCore = collection1; //solr的core名称 /** * * @Title: querySolr * @Description: TODO * @param: @param solrQuery * @param: @param type 用于接收数据的对象 * @param: @return * @return: List * @throws * @Date 2018年2月3日 下午8:05:12 */ public <T> List querySolr(SolrQuery solrQuery, Class<T> type){ try { HttpSolrServer solrServer = new HttpSolrServer(urlString); QueryResponse queryResponse = solrServer.query(solrQuery); SolrDocumentList solrDocumentList = queryResponse.getResults(); List<T> list = queryResponse.getBeans(type); return list; } catch (Exception e) { e.printStackTrace(); 13b2e return null; } } }
2 接收数据的实体类(此实体类包含hibernate的注解和solr的注解【@Field,加了次注解才可以通过java查询出来】)
package com.chuang.zzhl.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang.StringUtils; import org.apache.solr.client.solrj.beans.Field; import org.hibernate.envers.Audited; import com.chuang.foundation.module.domain.BaseEntity; /** * * Copyright © 2018 Chuang Network studio. Tech Ltd. All rights reserved. * * https://ourtool.cn * * @Package: com.chuang.zzhl.domain * @author: quan * @date: 2018年1月27日 下午4:45:30 */ @Entity @Table(name="T_ZZHL_WX_USER_INFO") @Audited public class WxUserInfoEntity extends BaseEntity{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "WX_USER_INFO_ID") @Field private Long wxUserInfoId; @Field @Column(name = "LAT_LON") private String latLon; @Transient private double dist; public double getDist() { return dist; } public void setDist(double dist) { this.dist = dist; } public String getLatLon() { return latLon; } public void setLatLon(String latLon) { this.latLon = latLon; } @Field @Column(name = "USER_NO") private String userNo; @Column(name = "OPENID") private String openid; @Field @Column(name = "NICK_NAME") private String nickName; @Column(name = "AVATAR_URL") private String avatarUrl;//用户图像 @Column(name = "LANGUAGE") @Field private String language; @Column(name = "GENDER") @Field private String gender; @Column(name = "COUNTRY") @Field private String country; @Column(name = "PROVINCE") @Field private String province; @Column(name = "CITY") @Field private String city; @Column(name = "CODE") private String code; @Field @Column(name = "BIRTH_YEAR") private String birthYear; //出生年份 @Column(name = "EDUCATION_CODE") private String educationCode;// 学历 码表 codeTableId=4 @Column(name = "ANNUAL_SALARY") private String annualSalary;//年薪 @Column(name = "CONSTELLATION_CODE") private String constellationCode;//星座 码表 codeTableId=5 @Column(name = "LABEL_CODE") private String labelCode;//标签 码表 男士标签codeTableId=6 女士标签codeTableId=7 /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#getBirthYear() */ public String getBirthYear() { return birthYear; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#setBirthYear(java.lang.String) */ public void setBirthYear(String birthYear) { this.birthYear = birthYear; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#getEducationCode() */ public String getEducationCode() { return educationCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#setEducationCode(java.lang.String) */ public void setEducationCode(String educationCode) { this.educationCode = educationCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#getAnnualSalary() */ public String getAnnualSalary() { return annualSalary; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#setAnnualSalary(java.lang.String) */ public void setAnnualSalary(String annualSalary) { this.annualSalary = annualSalary; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#getConstellationCode() */ public String getConstellationCode() { return constellationCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#setConstellationCode(java.lang.String) */ public void setConstellationCode(String constellationCode) { this.constellationCode = constellationCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#getLabelCode() */ public String[] getLabelCode() { return StringUtils.split(labelCode, ","); } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserOne#setLabelCode(java.lang.String[]) */ public void setLabelCode(String[] labelCode) { this.labelCode = StringUtils.join(labelCode,","); } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getOpenid() */ public String getOpenid() { return openid; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setOpenid(java.lang.String) */ public void setOpenid(String openid) { if(!StringUtils.isEmpty(openid)){ this.openid = openid; } } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getAvatarUrl() */ public String getAvatarUrl() { return avatarUrl; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setAvatarUrl(java.lang.String) */ public void setAvatarUrl(String avatarUrl) { this.avatarUrl = avatarUrl; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getLanguage() */ public String getLanguage() { return language; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setLanguage(java.lang.String) */ public void setLanguage(String language) { this.language = language; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getGender() */ public String getGender() { return gender; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setGender(java.lang.Integer) */ public void setGender(String gender) { this.gender = gender; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getCountry() */ public String getCountry() { return country; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setCountry(java.lang.String) */ public void setCountry(String country) { this.country = country; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getProvince() */ public String getProvince() { return province; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setProvince(java.lang.String) */ public void setProvince(String province) { this.province = province; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getCity() */ public String getCity() { return city; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setCity(java.lang.String) */ public void setCity(String city) { this.city = city; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getCode() */ public String getCode() { return code; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setCode(java.lang.String) */ public void setCode(String code) { this.code = code; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getNickName() */ public String getNickName() { return nickName; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setNickName(java.lang.String) */ public void setNickName(String nickName) { this.nickName = nickName; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getWxUserInfoId() */ public Long getWxUserInfoId() { return wxUserInfoId; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setWxUserInfoId(java.lang.Long) */ public void setWxUserInfoId(Long wxUserInfoId) { this.wxUserInfoId = wxUserInfoId; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#getUserNo() */ public String getUserNo() { return userNo; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserInfo#setUserNo(java.lang.String) */ public void setUserNo(String userNo) { this.userNo = userNo; } @Column(name = "RESIDENCE_LOCATION") private String residenceLocation; //居住位置 @Column(name = "WORKING_LOCATION") private String workingLocation; //工作位置 /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserTwo#getResidenceLocation() */ public String getResidenceLocation() { return residenceLocation; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserTwo#setResidenceLocation(java.lang.String) */ public void setResidenceLocation(String residenceLocation) { this.residenceLocation = residenceLocation; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserTwo#getWorkingLocation() */ public String getWorkingLocation() { return workingLocation; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserTwo#setWorkingLocation(java.lang.String) */ public void setWorkingLocation(String workingLocation) { this.workingLocation = workingLocation; } @Column(name = "HEIGHT") private Long height; //身高 厘米 @Column(name = "WEIGHT") private Long weight; //体重 公斤 //户籍 @Column(name = "HOUSEHOLD_REGISTER") private String householdRegister; //籍贯 @Column(name = "PLACE_OF_ORIGIN") private String placeOfOrigin; //婚姻状况 码表 codeTableId=8 @Column(name = "MARRIAGE_CODE") private String marriageCode; //车房情况 码表 codeTableId=9 @Column(name = "GARAGE_CODE") private String garageCode; public Long getHeight() { return height; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setHeight(java.lang.Long) */ public void setHeight(Long height) { this.height = height; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#getWeight() */ public Long getWeight() { return weight; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setWeight(java.lang.Long) */ public void setWeight(Long weight) { this.weight = weight; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#getHouseholdRegister() */ public String getHouseholdRegister() { return householdRegister; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setHouseholdRegister(java.lang.String) */ public void setHouseholdRegister(String householdRegister) { this.householdRegister = householdRegister; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#getPlaceOfOrigin() */ public String getPlaceOfOrigin() { return placeOfOrigin; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setPlaceOfOrigin(java.lang.String) */ public void setPlaceOfOrigin(String placeOfOrigin) { this.placeOfOrigin = placeOfOrigin; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#getMarriageCode() */ public String getMarriageCode() { return marriageCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setMarriageCode(java.lang.String) */ public void setMarriageCode(String marriageCode) { this.marriageCode = marriageCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#getGarageCode() */ public String getGarageCode() { return garageCode; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserThree#setGarageCode(java.lang.String) */ public void setGarageCode(String garageCode) { this.garageCode = garageCode; } //毕业院校 @Column(name = "GRADUATION_UNIVERSITIES") private String graduationUniversities; //所在行业 @Column(name = "INDUSTRY") private String industry; //工作职位 @Column(name = "JOB_POSITION") private String jobPosition; //本人性格 @Column(name = "MY_PERSONALITY") private String myPersonality; //择偶要求 @Column(name = "MATE_SELECTION") private String mateSelection; /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#getGraduationUniversities() */ public String getGraduationUniversities() { return graduationUniversities; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#setGraduationUniversities(java.lang.String) */ public void setGraduationUniversities(String graduationUniversities) { this.graduationUniversities = graduationUniversities; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#getIndustry() */ public String getIndustry() { return industry; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#setIndustry(java.lang.String) */ public void setIndustry(String industry) { this.industry = industry; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#getJobPosition() */ public String getJobPosition() { return jobPosition; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#setJobPosition(java.lang.String) */ public void setJobPosition(String jobPosition) { this.jobPosition = jobPosition; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#getMyPersonality() */ public String getMyPersonality() { return myPersonality; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#setMyPersonality(java.lang.String) */ public void setMyPersonality(String myPersonality) { this.myPersonality = myPersonality; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#getMateSelection() */ public String getMateSelection() { return mateSelection; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFour#setMateSelection(java.lang.String) */ public void setMateSelection(String mateSelection) { this.mateSelection = mateSelection; } //半身照、全身照 是否公开 codeTableId=3 @Column(name = "IS_BODY_PIC") private String isBodyPic; //半身照 @Column(name = "BODY_PIC") private String bodyPic; //全身照 @Column(name = "FULL_BODY_PIC") private String fullBodyPic; //身份证正面照片 @Column(name = "ID_CARD_POSITIVE_PIC") private String idCardPositivePic; //身份证反面照片 @Column(name = "ID_CARD_NEGATIVE_PIC") private String idCardNegativePic; //学历照片 @Column(name = "EDUCATION_PIC") private String educationPic; //房产证照片 @Column(name = "HOME_PIC") private String homePic; //产权证照片 @Column(name = "PROPERTY_RIGHT_PIC") private String propertyRightPic; /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getIsBodyPic() */ public String getIsBodyPic() { return isBodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setIsBodyPic(java.lang.String) */ public void setIsBodyPic(String isBodyPic) { this.isBodyPic = isBodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getBodyPic() */ public String getBodyPic() { return bodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setBodyPic(java.lang.String) */ public void setBodyPic(String bodyPic) { this.bodyPic = bodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getFullBodyPic() */ public String getFullBodyPic() { return fullBodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setFullBodyPic(java.lang.String) */ public void setFullBodyPic(String fullBodyPic) { this.fullBodyPic = fullBodyPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getIdCardPositivePic() */ public String getIdCardPositivePic() { return idCardPositivePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setIdCardPositivePic(java.lang.String) */ public void setIdCardPositivePic(String idCardPositivePic) { this.idCardPositivePic = idCardPositivePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getIdCardNegativePic() */ public String getIdCardNegativePic() { return idCardNegativePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setIdCardNegativePic(java.lang.String) */ public void setIdCardNegativePic(String idCardNegativePic) { this.idCardNegativePic = idCardNegativePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getEducationPic() */ public String getEducationPic() { return educationPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setEducationPic(java.lang.String) */ public void setEducationPic(String educationPic) { this.educationPic = educationPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getHomePic() */ public String getHomePic() { return homePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setHomePic(java.lang.String) */ public void setHomePic(String homePic) { this.homePic = homePic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#getPropertyRightPic() */ public String getPropertyRightPic() { return propertyRightPic; } /* (non-Javadoc) * @see com.chuang.zzhl.domain.WxUserFive#setPropertyRightPic(java.lang.String) */ public void setPropertyRightPic(String propertyRightPic) { this.propertyRightPic = propertyRightPic; } }
3 实战例子
package com.chuang.zzhl.controller;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.chuang.foundation.ajax.AjaxObj;
import com.chuang.foundation.ajax.AjaxObjDTO;
import com.chuang.foundation.module.controller.ZzhlBaseController;
import com.chuang.foundation.solr.SolrService;
import com.chuang.zzhl.domain.WxUserInfoEntity;
/**
*
* Copyright © 2018 Chuang Network studio. Tech Ltd. All rights reserved.
*
* https://ourtool.cn *
* @Description: TODO
*
* @author quan
*
* @Date 2018年2月3日 上午10:16:14
*/
@RestController
public class SolrController extends ZzhlBaseController{
@Autowired
private SolrService solrService;
@RequestMapping(value="/test.ao", method=RequestMethod.GET)
public List loadAll(){
SolrQuery query = new SolrQuery();
query.set("q","nickName:陈可");
List<WxUserInfoEntity> list = solrService.querySolr(query, WxUserInfoEntity.class);
return list;
}
/**
*
* @Title: 这是一个设置参数的例子,具体的可参照官方文档
* @Description: TODO
* @param:
* @return: void
* @throws
* @author quan
* @Date 2018年2月3日 下午8:10:48
*/
private void searchParams() {
//经纬度排序参数设置 SolrQuery query = new SolrQuery(); query.add("fq","{!geofilt}"); query.add("spatial","true"); query.add("fl","*,dist:geodist()");//设置,距离比较完成之后,返回相差的距离,数据放在dist字段中 query.add("sort","geodist() asc");//距离排序 query.add("pt","45.17614,-93.87341");//此处放发起查询请求的用户的位置 query.add("sfield","latLon");//数据库中存放用于比较的经纬度的字段 query.add("d","10000");//设置返回多少距离内的用户(具体单位是啥,还哦不太清楚)
}
}
完美收官,记录再次,以供后续查阅。。。
相关文章推荐
- AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句以及伪列作为查询条件实现
- PHP+MySQL实现模糊查询员工信息功能示例
- PHP MYSQL实现登陆和模糊查询两大功能
- Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
- JDBC实现增删改查、模糊查询、分页查询、子查询以及体现单例设计模式连接数据库
- PHP MYSQL实现登陆和模糊查询两大功能
- Mysql存储过程——通过百度坐标,查询半径内符合条件的用户以及排序后的距离
- 利用mysql5.6 的st_distance 实现按照距离远近排序。 (转载)
- 利用mysql5.6 的st_distance 实现按照距离远近排序。
- PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
- 07--MySQL自学教程:DQL(Data Query Language:数据库查询语言)简介、基础查询、条件查询、模糊查询以及排序(一)
- java实现的连接数据库及模糊查询功能示例
- 07--MySQL自学教程:DQL(Data Query Language:数据库查询语言)简介、基础查询、条件查询、模糊查询以及排序(一)
- python 实现元组中的的数据按照list排序, python查询mysql得到的数据是元组格式,按照list格式对他们排序
- 实现功能要求统计图书的总价,编写方法查询出在50元以上的所有图书,使用排序接口图书按照价格排序(升序排序)
- 如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
- MySQL单表多关键字模糊查询的实现方法
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- php和mysql采用utf-8编码时实现按照一个文本字段的首字母的拼音顺序进行排序的方法