安装jdk

上传jdk安装包到/usr/local/src/java/目录,解压

配置jdk环境变量,vim /etc/profile,添加下面配置

#set java env
JAVA_HOME=/usr/local/src/java/jdk1.8.0_51
JAVA_BIN=/usr/local/src/java/jdk1.8.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

保存后 source /etc/profile 让配置生效

java -version 查看jdk是否安装好

安装solr

solr各版本下载地址

http://archive.apache.org/dist/lucene/solr/

下载后上传到服务器解压

cd /usr/local/src
# 上传 solr-8.1.1.tgz 到 /usr/local/src 目录
# 并解压缩
tar -xzf solr-8.1.1.tgz

启动solr

cd /usr/local/src/solr-8.1.1   进入solr根目录

bin/solr start -force      启动solr -force 强制启动

开放8983端口

firewall-cmd --zone=public --add-port=8983/tcp --permanent

firewall-cmd --reload 重启防火墙

浏览器访问solr控制台

http://192.168.85.101:8983

创建core

数据库中 item表中的商品数据, 在 solr 中保存索引数据, 一类数据, 在 solr 中创建一个 core 保存索引数据

创建一个名为tt的core,首先要有以下目录结构

solr目录/server/solr/

         tt/

          conf/

          data/

cd server/solr

mkdir tt tt/conf tt/data 在solr目录/server/solr 创建tt目录,在tt目录分别创建conf和data目录

conf 目录是 core 的配置目录, 存储一组配置文件, 我们以默认配置为基础, 后续逐步修改

复制默认配置

cd /usr/local/src/solr-8.1.1/

cp -r server/solr/configsets/_default/conf server/solr/tt

创建名为tt的core

中文分词工具 - ik-analyzer

将下面4个jar包传到/server/solr-webapp/webapp/WEB-INF/lib目录下

  ik-analyzer-8.1.0.jar        ik分词器的jar包

  mysql-connector-java-5.1.46.jar   mysql的jar包

  solr-dataimporthandler-8.1.1.jar  

  solr-dataimporthandler-extras-8.1.1.jar  下面两个是DIH的jar包,待会要用到

把下面3个文件上传到/server/solr-webapp/webapp/WEB-INF/classes下,如classes目录不存在,则创建该目录

  IKAnalyzer.cfg.xml   ik分词器的扩展配置文件,指定下面两个文件的配置地址

  stopword.dic     停止词词典

  ext.dic        扩展词词典

  dynamicdic.txt    动态词词典

  ik.conf       

配置managed-schema

修改 solr目录/server/solr/tt/conf/managed-schema,添加 ik-analyzer 分词器
#添加ik分词器
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

重启solr服务

cd /usr/local/src/solr-8.1.1
bin/solr restart -force

添加字段Field

可以在添加ik分词器的文件managed-schema里直接添加如下:

<field name="title" type="text_ik" indexed="true" stored="true"/>
<field name="sellPoint" type="text_ik" indexed="true" stored="true"/>
<field name="price" type="long" indexed="true" stored="true"/>
<field name="num" type="int" indexed="true" stored="true"/>
<field name="image" type="string" indexed="false" stored="true" multiValued="true"/>
<field name="created" type="date" indexed="true" stored="true"/>
<field name="updated" type="date" indexed="true" stored="true"/>

也可以用浏览器在solr控制台上添加如下:

Copy Field 副本字段

查询时需要按字段查询,例如 title:电脑, 可以将多个字段的值合并到一个字段进行查询,默认查询字段 _text_
将 title 和 sellPoint 复制到 _text_ 字段

Data Import Handler 配置

将数据库的数据导入到solr

需要添加的jar包在上面提前导入过

将dih-config.xml文件传到/server/solr/tt/conf目录下,这个文件配置了从数据库导入solr的相关配置,dih-config.xml文件如下:
<dataConfig>
  <dataSource type="JdbcDataSource"
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://ip:3306/databaseName"
    user="root"
    password="root"
    batchSize="100"
    autoCommit="false" />
  <document name="item">
    <entity name="item" pk="id"
      query="SELECT id,title,sell_point,price,num,barcode,image,cid,`status`,created,updated FROM tableName"
      deltaQuery="SELECT id,title,sell_point,price,num,barcode,image,cid,`status`,created,updated FROM tableName WHERE updated &gt; date_add(str_to_date('${dih.last_index_time}','%Y-%m-%d %H:%i:%s'),interval 8 hour)"
      transformer="RegexTransformer">
    </entity>
  </document>
</dataConfig>

dataSource是配置数据源,从数据库导入数据
document里的query是查询数据导入solr,deltaQuery是设置每隔8小时把数据中最新的数据导入solr中

修改solrconfig.xml文件,添加dih-config.xml

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">dih-config.xml</str>
  </lst>
</requestHandler>

重启solr

cd /usr/local/src/solr-8.1.1

bin/solr restart -force

导入mysql数据

测试查询

项目实现全文检索

pom文件添加solr依赖

<dependency>

  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>

application.yml文件添加solr配置信息

spring:

  data:
    solr: #注意修改ip地址
      host: http://ip:8983/solr/tt

新建SearchService接口

public interface SearchService {
  List<Item> findItemByKey(String key) throws Exception;
}

新建SearchServiceImpl业务实现类

public class SearchServiceImpl implements SearchService {
  /*
  * SolrClient实例是在 SolrAutoConfiguration 类中创建的
  *
  * SolrAutoConfiguration添加了@Configuration注解,
  * 是spring boot自动配置类,其中的solrClient()方法中创建了SolrClient实例
  */
  @Autowired
  private SolrClient solrClient;

  @Override
  public List<Item> findItemByKey(String key) throws Exception {
  //封装查询的关键词
  //也可以封装其他的查询参数,比如指定字段,facet设置等
  SolrQuery query = new SolrQuery(key);
  //查询前多少条数据
  query.setStart(0);
  query.setRows(20);

  //执行查询并得到查询结果
  QueryResponse qr = solrClient.query(query);
  //把查询结果转成一组商品实例
  List<Item> itemList= qr.getBeans(Item.class);
  return itemList;
  }
}

ContollerSearch控制器

@Controller
public class SearchController {
  @Autowired
  private SearchService searchService;

  @GetMapping("/search/toSearch.html")
  public String search(String key, Model model) throws Exception {
    List<Item> itemList = searchService.findItemByKey(key);
    model.addAttribute("list", itemList);
    return "/search.jsp";
  }
}

优质内容筛选与推荐>>
1、boost::lockfree::queue
2、spring,使用依赖注入的方法
3、编程语言
4、冒泡排序
5、hard hard hard


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号