先来谈谈本人奋战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"/>
</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();
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");//设置返回多少距离内的用户(具体单位是啥,还哦不太清楚)
}
}
完美收官,记录再次,以供后续查阅。。。
本文详细介绍了如何在Solr4.10.0中部署基础功能,连接MySQL数据库,实现全局模糊查询和按经纬度距离排序。涉及版本选择、配置修改、数据源设置、分词器应用以及SpringBoot系统集成。

1404

被折叠的 条评论
为什么被折叠?



