Solr部署,连接mysql,实现模糊查询功能,以及按照距离排序功能

本文详细介绍了如何在Solr4.10.0中部署基础功能,连接MySQL数据库,实现全局模糊查询和按经纬度距离排序。涉及版本选择、配置修改、数据源设置、分词器应用以及SpringBoot系统集成。

先来谈谈本人奋战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功能部署

  1. 在网上下载solr4.10.0版本
  2. 解压至本地文件夹(楼主的位置是C:\D\solr)
    这里写图片描述
  3. cmd进入 C:\D\solr\solr-4.10.0\example,执行java -jar start.jar
    这里写图片描述
  4. 访问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");//设置返回多少距离内的用户(具体单位是啥,还哦不太清楚)


    }


}

完美收官,记录再次,以供后续查阅。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值