solr就不多介绍了。是用于搜索功能的开源工具,很强大
一、solr环境部署
solr本身能够用jetty启动,但是还是用tomcat启动比较适合我自己。学习solr有两个星期了,到现在(2016.11.27)solr最新版已经是6.3.0了,不过没关系,基本的东西都是一样的。
1、solr官网: http://lucene.apache.org/solr/
下载后解压,是这样的目录结构:
2、solr当然可以直接按网上其他很多教程那样整合到tomcat中,但是本人更喜欢建一个新工程,这样更灵活。下面我们在eclipse中新建一个tomcat-solr的java web工程,不过这里要注意,要把这个工程的访问路径变成solr,不能是tomcat-solr,因为solr的管理页面中,solr的开发者把这个目录写死了,我们要把访问路径改成solr,也就是:http://localhost:8080/solr/index.html ,怎么改呢:
在eclipse中:
下面我们进行如下操作:
1)将solr-6.2.1\server\solr-webapp\webapp下的内容copy到我们web工程的webapp下
2)将solr-6.2.1\server\lib\ext下的jar包,copy到我们的tomcat-solr功能中
3)将solr-6.2.1\server\resources\log4j.properties文件copy到tomcat-solr功能的src中,
4)在tomcat-solr工程的webapp文件夹下,新建文件夹solrhome,将solr-6.2.1\server\solr下的文件夹以及文件copy到solrhome中,
5)修改web.xml文件,修改env-entry-value的值为solrhome的绝对位置,如:
6)启动tomcat,访问http://localhost:8080/solr/index.html
到此,solr部署完毕。
我们的tomcat-solr功能应该长得如此帅:
对了,solr支持zookeeper搭建集群配置,在这里我们先注释掉,在solrhome文件夹下的solr.xml文件中,
<solr> <!-- 注解掉zookeeper搭建集群配置,采用master-slave的形式 <solrcloud> <str name="host">${host:}</str> <int name="hostPort">${jetty.port:8983}</int> <str name="hostContext">${hostContext:solr}</str> <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool> <int name="zkClientTimeout">${zkClientTimeout:30000}</int> <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int> <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int> <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str> <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str> </solrcloud> <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory"> <int name="socketTimeout">${socketTimeout:600000}</int> <int name="connTimeout">${connTimeout:60000}</int> </shardHandlerFactory> --> </solr>
二、core配置
solr的core非常重要,还有什么多core什么的,由于我也是刚刚学习,还没有搞明白,这里只是能够用最简单的,我们将在solrhome文件夹下,新建文件夹:my_solr,然后将solr-6.2.1\example\example-DIH\solr\solr下的文件以及文件夹copy到my_solr下,
访问刚才的地址:
三、整合mysql
1、首先我们在mysql中建个表作为练习,
CREATE TABLE `solrTest` ( `solrID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `context` varchar(255) DEFAULT NULL COMMENT 'context', `updateTime` datetime DEFAULT NULL COMMENT 'updateTime', `sort` int(11) DEFAULT '1' COMMENT '排序', PRIMARY KEY (`solrID`) ) DEFAULT CHARSET=utf8;
2、将mysql的驱动jar包,copy到我们tomcat-solr功能中(lib文件夹下,这个们问题的吧),
3、修改my_solr文件夹下的conf文件夹下的solr-data-config.xml文件:
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="123456"/> <document name="solr_mysql_test"> <entity name="solrTest" pk="solrID" query="select * from solrTest" deltaImportQuery="select * from solrTest where solrID = '${dih.delta.solrID}'" deltaQuery="select solrID from solrTest where updateTime > '${dataimporter.last_index_time}'"/> <field column="solrID" name="solrID"/> <field column="context" name="context"/> <field column="updateTime" name="updateTime"/> <field column="sort" name="sort"/> </document> </dataConfig>
这里面的内容具体什么意思,网上有很多专门介绍的文章博客,这里就不多说了
4、修改conf文件夹下的managed-schema文件,在schema标签下添加field
<field name="solrID" type="string" required="true" indexed="true" stored="true" multiValued="false"/> <field name="context" type="string" indexed="true" stored="true" multiValued="false"/> <field name="updateTime" type="date" indexed="true" stored="true" multiValued="false"/> <field name="sort" type="int" indexed="true" stored="true" multiValued="false"/>
这里面name对应solr-data-config.xml中的name,要一直,否则solr就找不到字段了,
type是类型,indexed代表是否可用于检索,stored代表是否存储,multiValued代表是否有多个值,除此之外还有很多字段,读者可以移步度娘。
(另外说一下,我这里用的其实是schema.xml,而不是managed-schema文件,不过感觉都是一个样)
下面,看下我们的成就(别忘了mysql填点数据哦,否则啥也看不出来):
先刷新下solr数据:
然后查数据:
四、下面,我们看看中文分词器
solr本分提供了很多分词器(不过对中文的分词实在不能用,愤怒!!!),对了,那么什么是分词呢?比如“数据结构”这个词,没分词前,solr就按“数据结构”这个词查(有点像mysql的=),中文分词后,就按“数据”,“结构”这两个词查(有点像like),这样更符合我们的搜索习惯
有很多支持solr中文分词的jar包,比如我们用的IKAnalyzer中文分词器
我们首先导入IKAnalyzer的jar包,注意IKAnalyzer的jar包要与solr版本对应,否则会execption的,
然后在managed-schema文件的最后:
<!-- IKAnalyzer中文分词器.如果版本与solr对应不上,会报抽象方法错误 --> <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>
在然后,比如我们数据库表中的context字段要进行分词,那么修改field:
<field name="context" type="text_ik" indexed="true" stored="true" multiValued="false"/>
也就是修改type为分词器的name
这时我们在去solr查询一下,我们先填几条数据:
去看看成果:
五、solrJ是连接我们java工程和solr的工具jar包,很实用
简单的使用示例:
public class SolrQueryTest { //solr 服务器地址 public static final String solrServerUrl = "http://localhost:8080/solr"; //solrhome下的core public static final String solrCroeHome = "my_solr"; @SuppressWarnings({ "resource", "deprecation" }) public static void main(String[] args) { try { //SolrClient client = new HttpSolrClient(solrServerUrl + "/" + solrCroeHome); //QueryResponse resp = client.query(new SolrQuery("*:*")); SolrClient client = new HttpSolrClient(solrServerUrl); QueryResponse resp = client.query(solrCroeHome, new SolrQuery("*:*")); List<TestBean> lists = resp.getBeans(TestBean.class); System.out.println(lists); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
bean(注意要有solrJ的注解):
public class TestBean { @Field("solrID") private String solrID; @Field("context") private String context; @Field("updateTime") private Date updateTime; public String getSolrID() { return solrID; } public void setSolrID(String solrID) { this.solrID = solrID; } public String getContext() { return context; } public void setContext(String context) { this.context = context; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } }
solr在查询时,也有很多方法,能够设置查询的条件,比如分页、分片检索、结果的过滤条件、排序等,下面只是一个示例,我一个功能的代码片段:
/** * 设置查询信息 */ solrQuery.setQuery(this.getQueryFields(keyWord)); //设置基本查询 /** * 设置查询条件 */ solrQuery.setFilterQueries(this.getFielder(condition)); /** * 分页 */ solrQuery.setStart(pInteger); solrQuery.setRows(systemConfigureUtil.getSolrRow()); /** * 分片检索(分类检索)—— */ solrQuery.setFacet(systemConfigureUtil.isFacet()); solrQuery.add("facet.field", systemConfigureUtil.getFacetStr()); //可以按多个字段分类,用逗号分隔 /** * 设置过滤结果——能查询出那些字段 */ solrQuery.add("fl", systemConfigureUtil.getFilterFields()); /** * 排序,注意是有顺序的 */ solrQuery.setSort(this.getSort(0)); //setSort()会覆盖之前的查询条件 solrQuery.addSort("sort", SolrQuery.ORDER.desc); //addSort()不会覆盖之前的查询条件
到此,我学到的solr的东西也就这些了,还会继续学习的。
我搭建好的tomcat-solr功能在我的github中:https://github.com/hejiawang/tomcat-solr
solrJ的练习工程:https://github.com/hejiawang/search-web
相关推荐
- **部署策略**: 探讨 Solr 的集群部署策略和分布式环境下的最佳实践。 #### 十、社区与支持 - **社区资源**: 引导用户探索 Solr 社区中的资源,包括论坛、邮件列表、文档等。 - **技术支持**: 提供官方和技术社区...
是一个tomcat和solrhome的压缩包,下载后只需要修改一下apache-tomcat-8.5.6\webapps\solr\WEB-INF\web.xml里面的第43行<env-entry-value>D:\solrhome,将目录修改成...jdk要求1.8,内部以集成ik分词器,fiel为text_ik
安装和使用IK分词器时,需要将这些文件部署到Solr的指定目录下,并在Solr的schema.xml配置文件中声明使用IK分词器,以确保在索引和查询时能够正确调用。 总的来说,IK分词器在Solr中扮演着至关重要的角色,它通过...
总的来说,Solr-Solrj 5.0.0是Java开发者与Solr集成的有力工具,尤其在处理中文文本时,通过合理的配置和使用分词器,可以实现高效、准确的全文搜索。在实际项目中,开发者还应关注性能调优、错误处理以及与其它系统...
在处理中文文档时,由于中文句子没有明显的分隔符,如英文的空格,因此需要使用分词器进行预处理。Solr支持多种中文分词器,如IK Analyzer、Smart Chinese Analyzer、Paoding Analyzer等,它们各自有不同的特性和...
Solr中文分词器是针对Apache Solr全文检索引擎在处理中文文本时的不足而设计的一种解决方案。Solr默认的分词策略主要针对英文文本,它以空格为分隔符进行分词,而对于中文这种没有明显分隔符的语言,就需要特定的...
mmseg4j提供了一种更高效的方式来处理中文分词问题,它通常与IK分词器配合使用,以提升整体的分词质量和效率。 在Solr 7.3.1中集成IK分词器和mmseg4j,可以帮助用户更准确地索引和搜索中文内容。具体步骤包括:首先...
下面我们将详细探讨Solr集群的构建与使用,以及IK分词器和Zookeeper的角色。 首先,让我们来看看Solr集群的构建。一个Solr集群是由多个独立的Solr实例组成,它们通过Zookeeper进行协调和管理。Zookeeper是一个...
solr详细配置教程与solrj的使用
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
本压缩包包含Solr 4.10.0的完整部署文件,以及额外的分词器和MySQL的JAR包,这对于那些需要与MySQL数据库集成并处理中文内容的项目来说非常实用。 1. **Solr 4.10.0核心组件**: - Solr 4.10.0包含了服务器端的...
Solr是中国最流行的开源搜索引擎平台之一,而IK Analyzer是一款针对中文的高性能分词器,尤其在处理现代汉语的复杂情况时表现出色。本教程将详细解释如何在Solr中安装和使用IK分词器。 首先,让我们理解一下什么是...
Solr全文检索与IK分词器的整合是构建高效中文搜索引擎的关键步骤。Solr,作为Apache Lucene的一个开源搜索服务器,提供了强大的全文检索、高级索引和搜索功能。而IK分词器(Intelligent Chinese Analyzer for Solr)...
总的来说,"solr在SSM框架中使用(支持中文分词查询)"这个项目展示了如何在Java Web环境中集成Solr,利用SSM框架的优势,实现高效的全文检索功能,尤其是对中文文本的支持,这在处理中文信息量大的网站或应用中显得...
1. 分布式搜索:Solr 6.2.0支持集群部署,可以将索引分片到多个节点,实现水平扩展,提升系统处理能力。 2. 实时搜索:Solr具有实时索引和查询的能力,一旦数据被更新,索引会立即反映出来,提供实时搜索体验。 3. ...
在处理中文文本时,由于中文的特殊性(词与词之间没有明显的分隔符),需要使用专门的分词器进行预处理,将连续的汉字流分割成有意义的词语,这个过程称为中文分词。IK Analyzer(简称IK)就是为了解决这个问题而...
本配置教程将详细介绍如何在Tomcat 8.5上部署Solr 7.4,并连接到MySQL 8.0.11数据库,同时集成IK分词器,提升中文搜索体验。 首先,确保你已安装Java Development Kit (JDK) 8或以上版本,因为Tomcat和Solr都需要...
以上步骤概括了将Solr 4.10.2与IK分词器部署到Tomcat的基本流程。在实际操作中,可能会遇到各种问题,如版本兼容性、网络配置、内存调优等,都需要根据具体情况进行解决。通过熟练掌握这些知识,你可以成功地构建一...