solr单机版服务器的搭建与数据导入

个人博客:打开链接

1 需要在linux系统下搭建solr服务。

(1)、需要安装tomcat
(2)、安装jdk

2 CentOS单机版安装:

第一步:安装jdk、安装tomcat
第二步:解压solr压缩包。
第三步:把dist/solr-4.10.3.war部署到tomcat下。
第四步:解压缩war包。启动tomcat解压。
第五步:需要把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包添加到solr工程中。
第六步:创建solrhome。把/root/solr-4.10.3/example/solr文件夹复制一份作为solrhome。
第七步:告诉solr服务solrhome的位置。需要修改web.xml
这里写图片描述

3 配置中文分析器、自定义业务域

分析器使用IKAnalyzer。
使用方法:
第一步:把IKAnalyzer依赖的jar包添加到solr工程中。把分析器使用的扩展词典添加到classpath中。
第二步:需要自定义一个FieldType。Schema.xml中定义。可以在FieldType中指定中文分析器。

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

第三步:自定义域。指定域的类型为自定义的FieldType。

Sql语句:
SELECT
    a.id,
    a.title,
    a.sell_point,
    a.price,
    a.image,
    b.`name` category_name,
    c.item_desc
FROM
    tb_item a
LEFT JOIN tb_item_cat b ON a.cid = b.id
LEFT JOIN tb_item_desc c ON a.id = c.item_id
WHERE
    a.`status` = 1
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

第四步:重新启动tomcat

4 索引库中导入数据

  • 4.1 Solrj的使用
public class SolrJTest {

    @Test
    public void testSolrJ() throws Exception {
        //创建连接
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
        //创建一个文档对象
        SolrInputDocument document = new SolrInputDocument();
        //添加域
        document.addField("id", "solrtest01");
        document.addField("item_title", "测试商品");
        document.addField("item_sell_point", "卖点");
        //添加到索引库
        solrServer.add(document);
        //提交
        solrServer.commit();
    }

    @Test
    public void testQuery() throws Exception {
        //创建连接
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");
        //创建一个查询对象
        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        //执行查询
        QueryResponse response = solrServer.query(query);
        //取查询结果
        SolrDocumentList solrDocumentList = response.getResults();
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_sell_point"));
        }
    }
}
  • 4.2 导入数据

4.2.1 分析
从数据库中根据sql语句查询数据,遍历数据创建文档对象,把文档对象写入索引库。

4.2.2 Dao层
Sql语句:

SELECT
    a.id,
    a.title,
    a.sell_point,
    a.price,
    a.image,
    b.`name` category_name,
    c.item_desc
FROM
    tb_item a
LEFT JOIN tb_item_cat b ON a.cid = b.id
LEFT JOIN tb_item_desc c ON a.id = c.item_id
WHERE
    a.`status` = 1

需要创建一个mapper文件。

接口:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.taotao.search.mapper.ItemMapper" >
    <select id="getItemList" resultType="com.taotao.search.pojo.SearchItem">
        SELECT
            a.id,
            a.title,
            a.sell_point,
            a.price,
            a.image,
            b.`name` category_name,
            c.item_desc
        FROM
            tb_item a
        LEFT JOIN tb_item_cat b ON a.cid = b.id
        LEFT JOIN tb_item_desc c ON a.id = c.item_id
        WHERE
            a.`status` = 1
    </select>
</mapper>

4.2.3 Service层
取商品列表,遍历列表,创建文档对象,把文档对象写入索引库。
要操作索引库需要SolrServer对象,可以把SolrServer放到spring容器中,注入到Service。
这里写图片描述

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private SolrServer solrServer;
    @Autowired
    private ItemMapper itemMapper;

    @Override
    public TaotaoResult importItems() throws Exception {
        //查询数据库获得商品列表
        List<SearchItem> itemList = itemMapper.getItemList();
        //遍历列表
        for (SearchItem item : itemList) {
            //创建文档对象
            SolrInputDocument document = new SolrInputDocument();
            //添加域
            document.addField("id", item.getId());
            document.addField("item_title", item.getTitle());
            document.addField("item_sell_point", item.getSell_point());
            document.addField("item_price", item.getPrice());
            document.addField("item_image", item.getImage());
            document.addField("item_category_name", item.getCategory_name());
            document.addField("item_desc", item.getItem_desc());
            //写入索引库
            solrServer.add(document);
        }
        //提交
        solrServer.commit();
        return TaotaoResult.ok();
    }

}

4.2.4 Controller层
请求一个url,返回TaotaoResult。

@Controller
public class ItemController {

    @Autowired
    private ItemService itemService;

    @RequestMapping("/importall")
    @ResponseBody
    public TaotaoResult importAll() {
        try {
            TaotaoResult result = itemService.importItems();
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的凯尔森同学

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值