一、solr的下载

http://lucene.apache.org/solr/
解压到合适的位置,以4.10.3为例。solr是一个服务,里面有solr项目war包。

二、找到solr的war包

solr-4.10.3\dist 目录下有:solr-4.10.3.war
solr-4.10.3\example\webapps 目录下有:solr.war
这两个是一样的项目。把它放到tomcat下启动就可以解压,或是直接解压到tomcat下。

三、添加solr的jar包

solr-4.10.3\example\lib\ext 目录下的所有Jar包放到 solr项目里面。

四、配置solrhome

1,solrhome的位置
solr-4.10.3\example\solr 目录下的所有东西就是solrhome应该有的所有文件。
里面的collection1就代表一个独立的索引库,叫solr core。可以有多个。
把solr文件夹复制到合适位置。
2,solr项目里配置solrhome
solr项目里面tomcat-solr\webapps\solr\WEB-INF下面有web.xml文件
有注释的配置

<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->

把注释打开,并把 put your solr home here 改成solr home的实现路径。

<env-entry><env-entry-name>solr/home</env-entry-name><env-entry-value>D:\tomcat\solrhome</env-entry-value><env-entry-type>java.lang.String</env-entry-type>
</env-entry>

五、启动并访问solr

http://127.0.0.1:8080/solr 正常打开页面说明配置成功。

六、添加solr core(索引库)

打开solr home文件夹,复制collection1(原有的索引库)并改个名字collection2,
打开新的索引库collection2,修改core.properties文件内容,把:name=collection2
重新启动tomcat就可以了。

七、了解sorl页面

1,左面主菜单


2,索引库菜单


Analyse 分词可以使用不同的域,这些域的定义参考:八、solr的域
Dataimport 批量导入,可以一次导入大量的原始数据,请参考:
Documents 对文档进行增删改的操作,里面可以写JSON等格式,但域名要先声明再使用,请参考:八、solr的域
Query 对索引库的查询

八、solr的域

1,solr中的域名要先声明再使用,文档里面必须有id域。
2,solr中怎么声明域名
在solr home里面的索引库的配置文件中:solrhome\collection2\conf 有schema.xml
1),里面有声明域:

<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>

域名为:name="title"
域值类型为:type="text_general"
是否索引:indexed="true"
是否存储:stored="true"
是否多值:multiValued="true" 一个关键字可对应多个值。
其中:text_general 类型的解释
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
.. </fieldType> 其实就是TextField类型。
2),动态域
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
动态的匹配以_txt结尾的域名
3),ID域
<uniqueKey>id</uniqueKey> 这个就相当于库表的ID,是必须有并且唯一的。
4),复制域
<copyField source="cat" dest="text"/>
<copyField source="name" dest="text"/>
在添加域值 cat或name的时候,也自动添加到text域里面,这样查询的时候查text域就可以了。
5),域类型
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
这个可以自定义分词分析器:参考九,用IK分词分析器和自定义域类型和域名

九、用IK分词分析器和自定义域类型和域名

1,把IK的Jar包放在solr项目里面
tomcat-solr\webapps\solr\WEB-INF\lib 里面放入:IKAnalyzer2012FF_u1.jar
2,把IK的配置文件放入solr项目的classpath里面,tomcat-solr\webapps\solr\WEB-INF 下应该有个
classes文件夹,如果没有,创建一个就好了,把:ext.dic,IKAnalyzer.cfg.xml,stopword.dic 放进去
3,在solr home里面的索引库的配置文件中:solrhome\collection2\conf 有schema.xml,打开此文件。
4,添加域类型
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
5,使用域类型添加域名
<field name="title_ik" type="text_ik" indexed="true" stored="true" multiValued="true" />
6,保存并重启tomcat就可以用自定义的域和分词分析器了。

十、批量导入数据库数据

1,分析源数据,进行自定义域
分析每一个属性
是否要分词:是用整个查询还是分词查询。
是否要建索引:是不是用来查询。
是否要存储:就看查询出来的东西是不是要显示。
是否多值:看对应的关系是不是一对多。
在solr home里面的索引库的配置文件中:solrhome\collection2\conf 有schema.xml中,配置域名
2,添加批量导入插件
1),导包:
a,在索引库里创建文件夹lib
b,找到solr-4.10.3\dist 目录下面有:
solr-dataimporthandler-4.10.3.jar 包
solr-dataimporthandler-extras-4.10.3.jar 包
数据库驱动包放入lib文件夹下。
2),修改配置
a,在索引库的配置文件里(solrhome\collection2\conf)找到solrconfig.xml 在时面添加配置

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

b,新建data-config.xml 里面放的是数据库信息,查询语句和字段与域名关联

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig><dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/lucene" user="root" password="root"/><document><entity name="product" query="SELECT                       pid,name,catalog_name,price,description,pictureFROM products "><field column="pid" name="id"/><field column="name" name="product_name"/><field column="catalog_name" name="product_catalog_name"/><field column="price" name="product_price"/><field column="description" name="product_description"/><field column="picture" name="product_picture"/></entity></document>
</dataConfig>

3,重启tomcat,solr项目里 dataimport功能可查看。

十一、页面上对索引库的增删改查操作

1,增加
1),单个的文档添加 在documents功能里,编辑文档格式,(可以用JSON格式),点submit
document,比如说:{"id":"change.me","title":"change.me"} 就是添加一个ID为change.me的文档,标题内
容是:change.me
2),批量增加参考:十,批量导入数据库数据
2,删除
1),用文档的ID进行删除
documents 功能里编辑(用XML格式)

<delete><id>这里写文档的ID</id>
</delete>
<commit />

2),用查询删除
documents 功能里编辑(用XML格式)

<delete><query>title:这里面是lucene的查询语法</query>
</delete>
<commit />

3,修改
修改和增加是一样的,只要库时里已经存在这个ID了,它就会对这个ID进行删除再添加。
4,查询


十二、solr 在代码中的使用

1,找到solr的客户端 solrJ
solrJ在solr-4.10.3\dist 目录下,有solr-solrj-4.10.3.jar包和solrj-lib文件夹,还有solr-
4.10.3\example\lib\ext 里面的所有jar包都是 solrJ所需要的jar包。
2, 因为solr是一个web服务,所以我们要有一个访问它的地
址:String url="http://127.0.0.1:8080/solr/collection2";后面跟的是要连接的索引
库名,如果不写,默认第一个。
3,连接solr服务
HttpSolrServer hss = new HttpSolrServer(url);
4,新增(更新)输入文档对象
SolrInputDocument sid = new SolrInputDocument();
sid.addField("id", "这是ID");
sid.addField("这里面是已经声名的域名", "域的值");
hss.add(sid);
hss.commit();
5,删除文档对象
1),用ID删除
hss.deleteById("这里可以是个ID,也可以是一个ID的List");
hss.commit();
2),用查询删除
hss.deleteByQuery("这里面是lucene的查询方法");
hss.commit();
6,查询文档对象
1),基础查询
要有查询对象,设置条件,进行查询,得到结果

//查询对象
SolrQuery sq = new SolrQuery();
//设置条件:sq.set("q", "*:*");
sq.setQuery("*:*");
//执行查询
QueryResponse qr = hss.query(sq);
//得到查询结果
SolrDocumentList sdl = qr.getResults();
System.out.println("总查询出来的条数:"+sdl.getNumFound());
//显示结果
for(SolrDocument sd : sdl){Object obj = sd.getFieldValue("id");System.out.println(obj);
}

2),高级查询
参考后面页面来进行设置查询条件

//查询对象
SolrQuery sq = new SolrQuery();
//设置条件
sq.setQuery("*:*");
//设置过滤条件
sq.setFilterQueries("title:测试","price:[0 TO 20]","name:天天");
//设置排序
sq.setSort("要排序的域", ORDER.desc);
//设置从那里开始
sq.setStart(0);
//设置取出多少条
sq.setRows(10);
//设置要返回的域
sq.setFields("显示名称就写名称的域","显示单价就写单价的域");
//设置默认查询域
sq.set("df", "默认查询域");
//开启高亮显示
sq.setHighlight(true);
//设置高亮的域
sq.addHighlightField("高亮的域");
//设置高亮的前缀
sq.setHighlightSimplePre("高亮前缀");
//设置高亮的后缀
sq.setHighlightSimplePost("高亮后缀");
//执行查询
QueryResponse qr = hss.query(sq);
//得到查询结果
SolrDocumentList sdl = qr.getResults();
System.out.println("总查询出来的条数:"+sdl.getNumFound());
//显示结果
for(SolrDocument sd : sdl){Object obj = sd.getFieldValue("id");System.out.println(obj);//取高亮Map<String, Map<String, List<String>>> map = qr.getHighlighting();//用ID得到数据,再得到高亮显示的内容List<String> list = map.get(obj).get("name");Object name = null;if(list != null && list.size() >0){name = list.get(0);}else{name = sd.getFieldValue("name");}System.out.println(name);
}

Solr的安装步骤及增删改查代码示例相关推荐

  1. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码

    1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...

  2. python操作数据库教程_Python连接mysql数据库及简单增删改查操作示例代码

    1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...

  3. C#访问SQLite完整增删改查代码

    以下代码都是经过我测试可用的: 一 一个控制台示例 using System; using System.Data.SQLite;namespace SQLiteSamples {class Prog ...

  4. java增删改一键生成_easyCode(java自动生成增删改查代码)

    [实例简介]读取数据库表结构 自动生成增删改查代码 [实例截图] [核心代码] package com.isoftstone.autocoding; import com.isoftstone.aut ...

  5. dmo Java_java DMO及增删改查代码的自动生成

    在web开发过程中,尤其是后台管理系统的开发中,少不了增删改成的基础操作,原来我自己的做法是一份一份的拷贝粘贴,然后修改其中的不同,然而这样既枯燥无味又浪费了大量的时间,所以根据自己项目结构的特点写了 ...

  6. java增删改查 jsp生成_jsp+servlet实现最简单的增删改查代码分享

    话不多说,请看代码 package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; imp ...

  7. 商品品牌信息的增删改查操作步骤_javaweb09-Servlet增删改查

    学习笔记是参考的how2j 本章笔记的目的是介绍如何与JDBC结合,通过servlet对数据库中的数据进行增.删.改.查. 一.前期准备 1.新建一个Dynamic Web Project 步骤为:f ...

  8. mongodb不等于某个值_MongoDB的安装以及基本增删改查命令

    MongoDB 介绍 mongodb 和大多数NoSQL 数据库(redis,memcached 等)一样,都是以 kv数据库(key/value) 存储数据 不同的是mongodb 文档数据库,存储 ...

  9. 一、mongodb数据库系列——介绍和安装 简单使用 增删改查

    一.Mongodb的介绍和安装 学习目标 了解 非关系型数据库的优势 了解 mongodb的安装 1. mongodb的介绍 1.1 什么是mongodb mongodb 是一个功能最丰富的NoSQL ...

最新文章

  1. xml 文本转json java_java将XML文档转换成json格式数据
  2. 我想吐槽“吐槽 Google 换新 Logo 的人”
  3. 汇编 cmp_汇编复习
  4. 深入理解:overflow:hidden——溢出,坍塌,清除浮动
  5. SAP License:MM-采购订单migo,101收货,有三种方式冲销,可以使库存减少,有何不同?
  6. 28 岁裸辞转行程序员,一年的心路历程大曝光
  7. winform基础 C#编程
  8. 苹果手机能下载java吗_苹果山寨手机java软件怎么下载?
  9. 简单工厂模式(Simple Factory Pattern)【1/23】
  10. CSS3科技雷达扫描动画js特效
  11. python----XML
  12. Ubuntu安装WebStorm
  13. 在线正则表达式测试器(JavaScript)
  14. jQuery排他思想(siblings)
  15. Mysql之分组查询
  16. OSI七层模型及各层功能概述
  17. 请仔细品味--俞敏洪励志演讲
  18. 计算机哪种语言处理速度最快,哪种高级编程语言的执行速度最快?
  19. Android自定义键盘的几个小点
  20. Vue禁用ESLint

热门文章

  1. 【学术相关】你在读博士期间明白的最深刻的道理是什么?
  2. 重磅推荐:2020年人工智能最精彩的25篇论文(附下载)
  3. 【机器学习基础】太棒了!这里有385篇自然语言处理和机器学习领域的综述总结...
  4. Kaggle知识点:时序数据与Embedding
  5. 【入门基础】conda+jupyter玩转数据科学环境搭建
  6. 新技术驱动新商业,网易创新企业大会亮点抢先看!
  7. SDK,JDK,API的区别
  8. APPCAN学习笔记004---AppCan与Hybrid,appcan概述
  9. HTML5+PhoneGap相机拍照
  10. Linux内核中流量控制(16)