博客
关于我
SSM商城项目(七)
阅读量:431 次
发布时间:2019-03-06

本文共 4269 字,大约阅读时间需要 14 分钟。

Solr服务搭建与搜索功能实现

学习计划

本文将详细介绍Solr服务的搭建、搜索功能的实现,以及如何使用SolrJ管理索引库,最后将商品数据导入索引库并实现搜索功能。


Solr服务搭建

环境配置

Solr是一个基于Java的开源搜索引擎,主要用于文本搜索和数据分析。在搭建Solr服务之前,需要先准备好以下环境:

  • 安装JDK:Solr是Java开发的,需要先安装Java Development Kit(JDK)。
  • 安装Tomcat:Solr通常部署在Tomcat或其他Web容器中。
  • 安装Linux环境:由于Solr主要在Linux系统上运行,需要先安装好Linux系统。

  • 搭建步骤

  • 上传Solr压缩包

    将Solr的压缩包上传到Linux系统中。

  • 解压Solr

    在Linux终端中解压Solr压缩包:

    tar -xf solr-4.10.3.tar.gz
  • 安装Tomcat

    如果尚未安装Tomcat,可以选择解压并复制到/usr/local/tomcat目录:

    cp -rf apache-tomcat-7 /usr/local/tomcat
  • 部署Solr到Tomcat

    将Solr的war包部署到Tomcat的webapps目录下,启动Tomcat后会自动解压war包。

  • 配置Solr

    /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib目录下,将solr-4.10.3/example/lib/ext中的所有jar包复制到该目录:

    cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
  • 创建SolrHome目录

    example/solr目录复制到/usr/local/solr/solrhome

    cp -r solr /usr/local/solr/solrhome
  • 修改web.xml文件

    在Solr工程的web.xml文件中配置SolrHome的路径,确保Solr服务能够正确加载。

  • 启动Tomcat

    启动Tomcat后,访问http://localhost:8080/solr,如果看到Solr的启动界面表示安装成功。


  • 业务域配置

    在Solr中定义业务域,主要在schema.xml文件中配置。需要定义以下字段:

  • 商品Id
  • 商品标题
  • 商品卖点
  • 商品价格
  • 商品图片
  • 商品分类名称
  • 配置步骤

  • 添加中文分析器

    IKAnalyzer2012FF_u1.jar添加到Solr工程的lib目录:

    cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
  • 配置FieldType

    schema.xml中添加自定义FieldType:

  • 配置业务域

    schema.xml中定义各字段,并设置字段类型:

  • 重启Tomcat

    配置完成后,重启Tomcat服务,确保业务域配置生效。


  • 搜索功能实现

    搜索服务工程搭建

    搜索服务工程主要包含以下模块:

  • e3-search-interface(JAR):提供搜索接口。
  • e3-search-Service(WAR):提供搜索服务。
  • e3-search-web(WAR):提供Web界面。
  • 使用SolrJ管理索引库

    添加文档

  • 添加SolrJ jar包

    在项目中添加SolrJ的依赖:

    org.apache.solr
    solr-solrj
    4.10.3
  • 创建SolrServer对象

    使用HttpSolrServer创建Solr服务连接:

    SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8090/solr");
  • 创建文档对象

    SolrInputDocument document = new SolrInputDocument();
  • 添加域

    添加必须的id域,并确保域名在schema.xml中定义:

    document.addField("id", "1");document.addField("item_title", "测试商品");document.addField("item_price", "199");
  • 提交文档

    将文档添加到索引库并提交:

    solrServer.add(document);solrServer.commit();
  • 删除文档

  • 删除文档

    使用deleteById方法删除文档:

    solrServer.deleteById("id:1");
  • 提交操作

    提交后才会永久删除文档:

    solrServer.commit();

  • 把商品数据导入索引库

    Dao层实现

  • 创建Dao接口

    public interface ItemMapper {    List
    getItemList();}
  • 创建Pojo类

    public class SearchItem implements Serializable {    private String id;    private String title;    private String sell_point;    private long price;    private String image;    private String category_name;    // setter和getter方法}
  • 创建Mapper文件

  • 数据库连接

    确保数据库连接配置正确,使用MyBatis进行数据库操作。


  • 搜索功能实现

    Controller实现

  • 搜索接口

    定义搜索接口:

    public interface SearchService {    SearchResult search(String keyWord, int page, int rows) throws Exception;}
  • 实现类

    public class SearchServiceImpl implements SearchService {    @Autowired    private SearchDao searchDao;    @Override    public SearchResult search(String keyWord, int page, int rows) throws Exception {        SolrQuery query = new SolrQuery();        query.setQuery(keyWord);        query.setStart((page - 1) * rows);        query.setRows(rows);        query.setHighlight(true);        query.addHighlightField("item_title");        query.setHighlightSimplePre("color:red");        query.setHighlightSimplePost("");        query.set("df", "item_title");        SearchResult result = searchDao.search(query);        result.setTotalPages((int) (result.getRecourdCount() / rows) + (result.getRecourdCount() % rows > 0 ? 1 : 0));        return result;    }}
  • Controller实现

    public class SearchController {    @Autowired    private SearchService searchService;    @Value("${PAGE_ROWS}")    private Integer PAGE_ROWS;    @RequestMapping("/search")    public String search(@RequestParam(defaultValue="1") Integer page, Model model, String keyword) throws Exception {        keyword = new String(keyword.getBytes("iso8859-1"), "utf-8");        SearchResult result = searchService.search(keyword, page, PAGE_ROWS);        model.addAttribute("itemList", result.getItemList());        model.addAttribute("totalPages", result.getTotalPages());        model.addAttribute("recourdCount", result.getRecourdCount());        return "search";    }}

  • 总结

    以上文档详细介绍了Solr服务的搭建、业务域的配置以及搜索功能的实现,涵盖了从环境配置到实际开发的全过程。

    转载地址:http://rheuz.baihongyu.com/

    你可能感兴趣的文章
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>
    npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
    查看>>
    npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
    查看>>
    npm scripts 使用指南
    查看>>
    npm should be run outside of the node repl, in your normal shell
    查看>>
    npm start运行了什么
    查看>>
    npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
    查看>>
    npm 下载依赖慢的解决方案(亲测有效)
    查看>>
    npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
    查看>>
    npm.taobao.org 淘宝 npm 镜像证书过期?这样解决!
    查看>>
    npm—小记
    查看>>
    npm上传自己的项目
    查看>>
    npm介绍以及常用命令
    查看>>