solr的搭建及简易使用

一、solr的搭建
以solr7.1.0版本为例,系统为CentOS 6.8
solr7.1.0 下载地址 http://archive.apache.org/dist/lucene/solr/7.1.0/solr-7.1.0.tgz
或者直接在linux输入
wget http://archive.apache.org/dist/lucene/solr/7.1.0/solr-7.1.0.tgz
解压完成后
因为solr7自带jetty服务器,不需要额外部署tomcat,非常的方便
进入到bin目录下开启solr
这里写图片描述
打开浏览器输入http://localhost:8983/solr,默认端口号为8983,就可打开solr管理界面了
这里写图片描述
接下来就是添加核心add core,
这里写图片描述
在这步骤之前需要进入该目录下,创建核心的名称的文件夹,例如csdn。
并把configsets/_default/conf文件拷贝到csdn目录下
这里写图片描述
然后回到add core页面输入csdn就可以添加成功了。

添加完毕后,需配置中文分词,这里使用的是IK分词器,进入csdn下的conf文件找到并编辑managed-schema,添加以下,保存并退出!wq

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> 
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
  </analyzer>
</fieldType>

以上就是solr的搭建了,下面介绍下solr的简易使用。
二、solr的使用
主要使用solrj来操作solr,pom依赖如下

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>4.10.3</version>
</dependency>

先来个简单的实体类

public class SolrBlog {
    private Integer id;
    private String title;
    private String describe;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }
}

接下来也需配置managed-schema添加以下代码(与前面的中文分词器关联),与实体类对应,保存并退出wq!

<field name="title" type="text_ik" />
<field name="describe" type="text_ik" />

<field name="searchText" type="text_ik" multiValued="true"/>
<copyField source="title" dest="searchText"/>
<copyField source="describe" dest="searchText"/>

有一个name=”searchText”的标签field,是用来把title和describe联系在一起,这样查询的时候,就会自动查询这两个字段,比较方便。
SolrServiceImpl类

@Service
public class SolrServiceImpl implements SolrService {

    private final SolrDao solrDao;

    @Autowired
    public SolrServiceImpl(SolrDao solrDao) {
        this.solrDao = solrDao;
    }

    @Override
    public void importAllBlogSolr(List<SolrBlog> solrBlogList) {
        try {
            for(SolrBlog solrBlog : solrBlogList) {
                SolrInputDocument document = new SolrInputDocument();
                document.addField("id", solrBlog.getId());
                document.addField("title", solrBlog.getTitle());
                document.addField("describe", solrBlog.getDescribe());
                solrDao.addAllBlogSolr(document);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public List<SolrBlog> searchBySolr(PageQuery pageQuery) {
        BeanValidator.check(pageQuery);
        SolrQuery solrQuery = new SolrQuery();
        //设置查找区域和查找内容
        solrQuery.setQuery("searchText:" + pageQuery.getQueryString());
        solrQuery.setStart(pageQuery.getPageNo() - 1);
        solrQuery.setRows(pageQuery.getPageSize());
        //设置默认搜索域
        //solrQuery.set("df", "searchText");
        //设置高亮显示
        solrQuery.setHighlight(true);
        solrQuery.addHighlightField("title");
        solrQuery.setHighlightSimplePre("<font color='red'>");
        solrQuery.setHighlightSimplePost("</font>");
        //执行查询
        List<SolrBlog> solrBlogList = null;
        try {
            solrBlogList = solrDao.searchBySolr(solrQuery);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return solrBlogList;
    }

    @Override
    public void deleteSolrByBlogId(long id) {
        try {
            solrDao.deleteBlogSolrById(id);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void addBlogSolr(SolrBlog solrBlog) {
        try {
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", solrBlog.getId());
            document.addField("title", solrBlog.getTitle());
            document.addField("describe", solrBlog.getDescribe());
            solrDao.addBlogSolr(document);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void updateBlogSolr(SolrBlog solrBlog) {
        deleteSolrByBlogId(solrBlog.getId());
        addBlogSolr(solrBlog);
    }

    @Override
    public void deleteAllBlogSolr() {
        try {
            solrDao.deleteAllBlogSolr();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

SolrDaoImpl类

public class SolrDaoImpl implements SolrDao {

    @Autowired
    private SolrServer solrServer;

    @Override
    public void addAllBlogSolr(SolrInputDocument document) throws IOException, SolrServerException {
        solrServer.add(document);
        solrServer.commit();
    }

    @Override
    public List<SolrBlog> searchBySolr(SolrQuery solrQuery) throws SolrServerException {
        //根据条件查询索引库
        QueryResponse queryResponse = solrServer.query(solrQuery);
        SolrDocumentList solrDocumentList = queryResponse.getResults();
        List<SolrBlog> solrBlogList = new ArrayList<>();
        //取高亮显示
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
        //取博客列表
        for(SolrDocument solrDocument : solrDocumentList) {
            SolrBlog solrBlog = new SolrBlog();
            //取高亮显示的结果
            List<String> list = highlighting.get(solrDocument.get("id")).get("title");
            String title;
            if(list != null && list.size() > 0) {
                title = list.get(0);
            } else {
                title = (String) solrDocument.get("title");
            }
            solrBlog.setId(Integer.valueOf((String) solrDocument.get("id")));
            solrBlog.setTitle(title);
            solrBlog.setDescribe((String) solrDocument.get("describe"));
            solrBlogList.add(solrBlog);
        }
        return solrBlogList;
    }

    @Override
    public void deleteBlogSolrById(long id) throws IOException, SolrServerException {
        solrServer.deleteByQuery("id:" + String.valueOf(id));
        solrServer.commit();
    }

    @Override
    public void addBlogSolr(SolrInputDocument document) throws IOException, SolrServerException {
        solrServer.add(document);
        solrServer.commit();
    }

    @Override
    public void deleteAllBlogSolr() throws IOException, SolrServerException {
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
}

代码都比较简单,就不做太多介绍了。以上就是solr的搭建和solrJ简易使用示例。

猜你喜欢

转载自blog.csdn.net/XlxfyzsFdblj/article/details/81030778