知识点
相关文章
更多最近更新
更多solr学习笔记(一):入门
2019-03-27 01:18|来源: 网路
Solr是一个比较成熟和热门的搜索引擎解决方案,之前的博客也提到过。最近在学习搜索开发也查阅过solr的资料,相对elasticsearch来说资料更全,案例更多也更让人放心,我现在还没发做很细致的比较,但个人认为中小型搜索用solr可能会更合适,毕竟更成熟可靠一些。
介绍Solr的资料也有不少,比如书籍就有 Solr.3.Enterprise.Search.Server和Apache Solr 3.1 Cookbook。前者更适合完全搜索新手,如果你是对检索有一定了解,尤其是对lucene有了解的,我更推荐ApacheSolrRefGuide,这本书比较偏手册型,更适合开发者定位到问题。虽然目前solr已经到了4.0版本,不过很久旧版本的教程应该还是差不多可以对得上。
下面就列出一些我在学习过程中记录的一些要点:
1. 启动
1.1 jetty试用,
通过-D指定其他属性
cd example
java -Dsolr.solr.home=/some/dir -jar start.jar, -D
1.2 tomcat
1) 拷贝solr.war到$TOMCAT_HOME/webapps
2) 拷贝solr实例需要的配置目录(example/solr)至$SOLR_HOME
3) 在$TOMCAT_HOME/conf/Catalina/localhost下创建个solr.xml, 内容为,注意路径要自己写,别直接贴我这个上去用
<Context docBase="
YOUR_TOMCAT_HOME
/webapps/solr" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="YOUR_SOLR_HOME" override="true" />
</Context>
4) 启动tomcat 启动solr项目
2. 配置,
配置是非常重要的部分,例子给出比较全的配置项,但需要好好理解
每个collection都有一般性配置solrconfig.xml 和表配置schema.xml
2.1 schema.xml
types: 定义字段类型、怎么分词等
例如<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>以及: <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"><analyzer type="index"><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><!-- in this example, we will only use synonyms at query time<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>--><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>
fields: 表字段
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>copyField: 用来标识字段不同的索引方式,或者多个字段联合索引
2.2 solrconfig.xml : collection核心配置<copyField source="cat" dest="text"/>
requestHandler: 分发Http request到不同Handler执行,包括search和update两部分
UpdateRequestProcessorChain: 定义一些列更新操作,之后在requestHandler的属性
<str name="update.chain">指定
highlighting: 高亮设定
主要参数:
searchComponent: 提供搜索的核心功能,主要包括检索、高亮、分组等
queryResponseWriter: 结果输出格式定义
2.3 solr.xml core admin配置
包括设置每个collection数据存放目录,admin路径;
通常可以在用户界面上操作并修改
必须保证至少有一个core,否则启动solr admin管理GUI会报错
3. 索引,索引其实就是为solr传入文档
默认支持XML JSON CSV格式,
4.0开始支持原子操作
add, set 和 inc,但如果文档指定id没有出现在索引里,会添加只有部分字段的文档,也就是upsert
可以去重(一般情况可能用不着):updaterequestChain中需要增设
<updateRequestProcessorChain name="dedupe">
<processor
class="org.apache.solr.update.processor.SignatureUpdateProcessorFactory">
</processor>
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
并在handler中启用:<str name="update.chain">dedupe</str>
HTTP删除collection内的文档:
curl -XPOST http://localhost:8080/solr/collection1/update?commit=true
<delete><query>*:*</query></delete>
4. 搜索,拼接http url字符串来获取搜索结果
4.1 设置search的requestHandler和返回的responsewriter。
4.2 设置search的参数
q: 查询词。格式field:query
defType: 指定query parser
fq: 过滤器,类似SQL的where
qt: 指定Handler处理请求
start和rows: 分页功能
fl:输出字段列表
sort:排序
wt: 输出格式,需要在solrconfig.xml定义queryResponseWriter, 默认是xml
echoHandler和echoParams: 指定debug时候输出的信息
facet.*: 分组功能,详见:http://wiki.apache.org/solr/SimpleFacetParameters
mlt.*: moreLikeThis功能, 详见:http://wiki.apache.org/solr/MoreLikeThis
hl.*: 高亮功能,详见:http://wiki.apache.org/solr/HighlightingParameters
4.3 结果分组功能grouping:类似facet。
http://wiki.apache.org/solr/FieldCollapsing
4.4 join功能(暂缺)
5. queryparser
用于解析query语法,defType参数设置
standard和Dismax的区别:
Standard要求输入的查询内容符合SolrQuerySyntax查询语法,特殊字符要进行转义。如果不符合语法,会报错。Dismax查询就不会存在这样的问题,对于用户的输入始终都不会报错http://ericbao.blog.sohu.com/200652504.html
6 加载分词
6.1 IK分词
注意下载适合solr版本的ikanalyzer, 以tomcat版本为例
1. 将jar包放入{$tomcat}的webapps/
solr/WEB-INF/lib 下 ,
动态方法不需要重启solr实例:放在需要添加的collection目录的lib下, 目录自行新建。然后再solrconfig.xml加一行 <lib dir="./lib" />
2. 将IKAnalyzer.cfg.xml 和 需要的字典文件放在
{$tomcat}的webapps/
solr/WEB-INF/classes (
目录可能需新建
)
3. schema.xml中在fieldType 加入
<fieldType name="text" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
即可使用相应fieldType 的
在solr admin中可以在对应collection下进行测试。tomcat要注意uri的编码问题(在server.xml中 Connector中加入
URIEncoding="utf-8")
6.2 smartcn分词
jar包直接加入lib
7 solrj
JAVA API:主要就是把java对象拼装成Http字符串通过Httpclient来发送请求。
以上几点我认为使用solr需要注意的事项吧,有关更深入的学习笔记,会在之后陆续放出
转自:http://blog.csdn.net/lgnlgn/article/details/8453487
相关问答
更多-
笔记本计算机怎么学习打字[2023-08-06]
下载个金山打字软件安装上,就可以按步骤循序渐进的学习了。五笔、拼音、词语、句子、文章等等都能练习。 -
学习java如何入门?[2024-03-07]
对于广大编程初学者来说,存在着这样普遍的认识:学习程序设计选择编程语言 很重要,开口闭口就是VisualBasic、Visual C++、Delphi、Power Builder等一些现在比较流行的开发工具。经常看见有初学者问:我学C/C++,究竟是学 VisualC++好,还是学Borland C++ Builder好呢?或者就是要求在Visual Basic和Delphi之间作出选择。学习程序设计和学习程序设计语言究竟是怎么一个关系?初学者究竟应该如何取舍呢?就此我们打个简单的比方:学习程序设计就好比学 ... -
JavaScript入门学习的资料和建议[2022-09-14]
我从事软件开发有6年多了,从网络开发到操作系统内核设计,对应你的问题以下是我的一些个人经验和见解: 1.1 不是,网络程序员的技能门槛比较低,虽然需求量大,但是供给也很大。 1.2 主要是做Web,必备技术:HTML, CSS, JavaScript,常用编程语言环境:PHP, ASP(C#/VB), JSP(Java), SQL…… 1.3 Dreamwaver(用来做网页设计:HTML, CSS)、Apache/IIS Web服务器软件、MySQL/SQL Server数据库软件即可。 1.4 建议从L ... -
学习java,入门哪些书籍好?[2022-04-30]
java从入门到精通。其实虽然他书名这么叫,但实际是从小白到入门,基本这本书讲的都不会太复杂,但是会让你能比较全面的都了解java的基础技术。。 然后后续可以看java实战经典之类的书,这种书就例子多一些,讲解也细一些,便于你更好的理解之前所学。。 恩,除此之外,还有一些视频也可以参考,比如马士兵的呀,黑马程序员啊。这些相信很多自学的人都有看过的,都是很不错的。 -
韩顺平老师“java从入门到精通”的全部ppt和代码笔记[2021-02-22]
您要的ppt和笔记我已发送,请按照步骤进行操作!! 你的采纳是我前进的动力, 记得好评和采纳,互相帮助, 如果你认可我的回答,敬请及时采纳. -
有html入门教程吗?我要学习[2022-05-15]
去慕课网吧,哪里全方面开放不收一费用的。我之前也是在那边学习的,说实话挺不错的学习平台。 加油 加油! -
php学习从入门到精通[2019-03-21]
就PHP语言本身来讲并不复杂,两周三周就可以上手,但要想独立做点什么东西,还是得花些时间和精力,这取决于你的基础,相关知识掌握的程度,以及自身素质等很多因素。 推荐《PHP 5和MySQL 5程序设计》(第三版)讲的东西比较实用,实例也多。 MySQL应该是同时学习的,不要急于接触那些现成的一些类库和框架,把语言基础打好,多写多练多看,网上或者教程里的代码能轻松阅读了以后,再学习框架、类库这些东西,以及SQL数据库的比较高级的查询技巧。可以参考O'Reilly的 《PHP & MySQL Web数据库应用开 ... -
php学习从入门到精通[2022-03-08]
就PHP语言本身来讲并不复杂,两周三周就可以上手,但要想独立做点什么东西,还是得花些时间和精力,这取决于你的基础,相关知识掌握的程度,以及自身素质等很多因素。 推荐《PHP 5和MySQL 5程序设计》(第三版)讲的东西比较实用,实例也多。 MySQL应该是同时学习的,不要急于接触那些现成的一些类库和框架,把语言基础打好,多写多练多看,网上或者教程里的代码能轻松阅读了以后,再学习框架、类库这些东西,以及SQL数据库的比较高级的查询技巧。可以参考O'Reilly的 《PHP & MySQL Web数据库应 ... -
学习PLC编程入门,需要购买什么样的书籍呢?[2023-01-22]
太利害了。 学习的第一步。先学习电机。PLC 和变频器。都是用来控制电机的。所以先学电机。明白电机的工作原理,和机械特性。 变频器由:整流电路,IGBT模块逆变电路,单片机CPU,电解电容,制动单元,等部分组成。学变频器,要知道他的构造,和里面元气件的作用,还有电路的组成。 推荐你从三菱变频器学习。《变频调速技术及应用》这书不错。 加分给我,有空我和你探讨一下。 -
软件自动化测试学习什么?好入门吗?[2023-10-03]
软件自动化测试的学习,根据松勤公开课里面讲述,大体步骤有: 1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform -> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架。希望对你有帮助。