Solr在Linux中的安装

1、将Solr打包到tomcat中

  1.1、将Solr下dist/solr.war放入tomcat中:

Solr在Linux中的安装

  1.2、将Solr/example/lib/ext 下面所有依赖的包打包到tomcat中:

Solr在Linux中的安装

2、配置Solr的数据库

  2.1、将 Solr/example/  中的solr下的所有文件放到指定位置:

Solr在Linux中的安装

 

  2.2、通过修改solr工程中的web.xml文件,使其与solrhome关联起来

Solr在Linux中的安装

 

    将<en-entry-value/>标签中的值改为solrhome的绝对路径即可

Solr在Linux中的安装

3、安装IK中文分词器

  3.1、将IK分词器的jar包放入到solr工程

Solr在Linux中的安装

 

  3.2、在WEB-INF目录下创建classes目录,放入IK分词器的配置文件

Solr在Linux中的安装

 

  3.3、配置solrhome/collection1/conf/schema.xml  文件

<!--配置IK分词器 -->
    <fieldType name="text_ik" class="solr.TextField">
         <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
    </fieldType>

4、配置IK分词器的域

  4.1、配置域

    4.1.1、在solrhome/collection1/conf/schema.xml  文件中,配置:(相当于MySql中的创建表)

<!-- 配置域 存入到solr表的结构 -->
    <field name="item_goodsid" type="long" indexed="true" stored="true"/>
    <field name="item_title" type="text_ik" indexed="true" stored="true"/>
    <field name="item_brand" type="text_ik" indexed="true" stored="true"/>
    <field name="item_category" type="string" indexed="true" stored="true"/>
    <field name="item_price" type="double" indexed="true" stored="true"/>
    <field name="item_image" type="string" indexed="false" stored="true"/>
    <field name="item_seller" type="text_ik" indexed="true" stored="true"/>
    <field name="item_updatetime" type="date" indexed="true" stored="true"/>

    4.1.2、绑定java.pojo中相对应的数据

    //因为id是solr中自定义的域,所以无需指定
    @Field
    private Long id;

    @Field("item_title")
    private String title;

   @Field("item_price")
    private BigDecimal price;

     @Field("item_image")
    private String image;

    @Field("item_updatetime")
    private Date updateTime;

    @Field("item_goodsid")
    private Long goodsId;

     @Field("item_category")
    private String category;

    @Field("item_brand")
    private String brand;

    @Field("item_seller")
    private String seller;

  4.2、设定复制域  (即设定特殊的搜索格式,搜索的关键字将应用于其下的复制域中)

<!-- 复制域 搜索的逻辑,不需要存在数据库中 -->
    <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="item_title" dest="item_keywords"/>
    <copyField source="item_category" dest="item_keywords"/>
    <copyField source="item_seller" dest="item_keywords"/> 
    <copyField source="item_brand" dest="item_keywords"/> 

  4.3、设置动态域

    4.3.1、在solrhome/collection1/conf/schema.xml  文件中,配置:

<!-- 动态域 -->
    <dynamicField name="item_spec_*" type="string" indexed="true" stored="true"/>

    4.3.2、在对应的java.pojo中配置:

 //添加动态域
    @Dynamic
    @Field("item_spec_*")
    private Map<String,String> specMap;
    
    public Map<String, String> getSpecMap() {
        return specMap;
    }

    public void setSpecMap(Map<String, String> specMap) {
        this.specMap = specMap;
    }

  item_spec_* 中的“ * ”会自动匹配Map中的key值

5、solr结合spring的demo

  5.1、在Spring中的配置

    <!-- 服务器地址 -->
    <solr:solr-server id="solrServer" url="http://192.168.XXX.XXX:8080/solr"/>
    
    <!-- 操作solr的模板 -->
    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg name="solrServer" ref="solrServer"></constructor-arg>
    </bean>

  5.2、一些简单操作

public class SolrUtil {

    @Autowired
    private TbItemMapper tbItemMapper;
    
    @Autowired
    private SolrTemplate solrTemplate;
    
    public List<TbItem> selectFromMysql() {
        TbItemExample example = new TbItemExample();
        Criteria criteria = example.createCriteria();
        criteria.andStatusEqualTo("1");
        List<TbItem> list = tbItemMapper.selectByExample(example);
        return list;
    }
    
    public void save() {
        List<TbItem> list = selectFromMysql();
        //增加规格
        for(TbItem tbItem:list) {
            Map specMap = JSON.parseObject(tbItem.getSpec(),Map.class);
            tbItem.setSpecMap(specMap);
        }
        solrTemplate.saveBeans(list);
        solrTemplate.commit();
    }
    
    public void delete() {
        Query query = new SimpleQuery("*:*");
        solrTemplate.delete(query);
        solrTemplate.commit();
    }
    
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext-*.xml");
        SolrUtil solrUtil = (SolrUtil) app.getBean("solrUtil");
        /*solrUtil.save();*/
        solrUtil.delete();
    }
}

 

上一篇:Apache Solr Velocity 注入远程命令执行漏洞 (CVE-2019-17558)


下一篇:[转] 什么是Solr,它能为我们解决什么问题,怎么用?