solr
elastic serch
基于apache luence的开源实现
内置容器:Jetty,
1 2
bin contrib docs licenses LUCENE_CHANGES.txt README.txt CHANGES.txt dist example LICENSE.txt NOTICE.txt server
server文件夹
1 2 3
contexts lib README.txt scripts solr-webapp etc modules resources solr start.jar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Enable everything but TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method-omission>TRACE</http-method-omission> </web-resource-collection> </security-constraint>
访问:
提示信息
1 2 3 4 5 6 7
[[email protected] bin]# ./solr start -force Warning: Available entropy is low. As a result, use of the UUIDField, SSL, or any other features that require RNG might not work properly. To check for the amount of available entropy, use 'cat /proc/sys/kernel/random/entropy_avail'. NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983. Started Solr server on port 8983 (pid=2409). Happy searching!
1 2 3 4 5 6 7
<requestHandler name="/select" class="solr.SearchHandler"> <!-- default values for query parameters can be specified, these will be overridden by parameters in the request --> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int>
1 2 3 4 5
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
1 2 3 4 5 6 7 8 9 10
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.13:3306/mogujie" user="root" password="root" /> <document> <entity name="product" query="select * from product"> <field column="product_name" name="productName" /> <field column="id" name="id" /> <field column="product_volume" name="productVolume" /> </entity> </document> </dataConfig>
在managed-schema配置:
配置分词器插件:
1 2 3 4
<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
Solr 和 elasticsearch 都是lucene的开源实现,lucene本身就是一个可使用的搜索引擎,但是直接使用lucene需要额外的开发工作,而且比较复杂,成本较高,所以solr和elasticsearch属于封装了lucene,进行了简化。
1 2 3 4
运行solr需要有jdk环境的支持 1.官网下载linux版的压缩包 2.将压缩包上传到虚拟机的home路径下 3.连接到虚拟机,进入到home路径下,对压缩包进行解压,解压到/usr/local下
5.solr中自带了一个web容器,jetty,启动服务后可在浏览器中访问solr,接下来需要修改solr项目的web.xml文件
编辑文件
将文件中最后一段配置,security-constraint 标签注释掉,不注释的话启动服务后无法在浏览器中访问
修改后保存并且退出
6.进入bin目录,并且启动服务
启动服务
看到如下字样 证明启动成功
7.在浏览器访问,首先关闭虚拟机防火墙,打开本机浏览器输入 虚拟机ip:8983/solr
8.关闭solr服务 在bin目录下输入 ./solr stop 即可
一般来讲我们需要将数据库中的某些数据导入到solr中 1.首先在solr中创建一个core(core可以看做是一个数据仓库) 创建core时要保证solr是启动状态,在solr的bin目录下输入 ./solr create -c 核心名字 –force
创建一个名字叫mycore的核心 2.创建好的core会被保存在/usr/local/solr-7.2.1/server/solr
1 2 3 4 5 6 7 8 9
4.首先打开solrconfig.xml,定位到680行左右,增加配置 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> 增加配置后如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
该配置是导入数据时一个必要配置,增加这一个配置即可,保存然后将文件关闭 5.新建一个配置文件data-config.xml,并增加配置 <dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.13:3306/mogujie" user="root" password="root" /> <document> <entity name="product" query="select * from product"> <field column="product_name" name="productName" /> <field column="id" name="id" /> <field column="product_volume" name="productVolume" /> </entity> </document> </dataConfig> 指定连接的数据库,用户名和密码,因为solr是根据所配置的语句,到指定的数据库中去查询,将结果集存放到solr中 entity标签 name属性为给该数据起个名字,不重复即可 query 为查询语句 根据定义的查询语句 来导入数据 field为需要导入的字段,需要哪个字段就对哪个字段配置即可,不需要全部配置 column属性为查询后的列名,name为该字段导入到solr后的名字 增加完配置后如下
jsp页面
1 2 3 4 5 6 7 8 9 10 11 12
@Controller public class SolrContro { @Autowired private SolrService solrService; @RequestMapping("/test") public String test(@RequestParam(value="productName")String productName,ModelMap modelMap){ modelMap.addAttribute("list", solrService.getProdcut(productName)); return "test"; } }
结果: