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: 用来标识字段不同的索引方式,或者多个字段联合索引
<copyField source="cat" dest="text"/>
     2.2 solrconfig.xml : collection核心配置
         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.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

相关问答

更多
  • 下载个金山打字软件安装上,就可以按步骤循序渐进的学习了。五笔、拼音、词语、句子、文章等等都能练习。
  • 对于广大编程初学者来说,存在着这样普遍的认识:学习程序设计选择编程语言 很重要,开口闭口就是VisualBasic、Visual C++、Delphi、Power Builder等一些现在比较流行的开发工具。经常看见有初学者问:我学C/C++,究竟是学 VisualC++好,还是学Borland C++ Builder好呢?或者就是要求在Visual Basic和Delphi之间作出选择。学习程序设计和学习程序设计语言究竟是怎么一个关系?初学者究竟应该如何取舍呢?就此我们打个简单的比方:学习程序设计就好比学 ...
  • 我从事软件开发有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从入门到精通。其实虽然他书名这么叫,但实际是从小白到入门,基本这本书讲的都不会太复杂,但是会让你能比较全面的都了解java的基础技术。。 然后后续可以看java实战经典之类的书,这种书就例子多一些,讲解也细一些,便于你更好的理解之前所学。。 恩,除此之外,还有一些视频也可以参考,比如马士兵的呀,黑马程序员啊。这些相信很多自学的人都有看过的,都是很不错的。
  • 您要的ppt和笔记我已发送,请按照步骤进行操作!! 你的采纳是我前进的动力, 记得好评和采纳,互相帮助, 如果你认可我的回答,敬请及时采纳.
  • 去慕课网吧,哪里全方面开放不收一费用的。我之前也是在那边学习的,说实话挺不错的学习平台。 加油 加油!
  • 就PHP语言本身来讲并不复杂,两周三周就可以上手,但要想独立做点什么东西,还是得花些时间和精力,这取决于你的基础,相关知识掌握的程度,以及自身素质等很多因素。 推荐《PHP 5和MySQL 5程序设计》(第三版)讲的东西比较实用,实例也多。 MySQL应该是同时学习的,不要急于接触那些现成的一些类库和框架,把语言基础打好,多写多练多看,网上或者教程里的代码能轻松阅读了以后,再学习框架、类库这些东西,以及SQL数据库的比较高级的查询技巧。可以参考O'Reilly的 《PHP & MySQL Web数据库应用开 ...
  • 就PHP语言本身来讲并不复杂,两周三周就可以上手,但要想独立做点什么东西,还是得花些时间和精力,这取决于你的基础,相关知识掌握的程度,以及自身素质等很多因素。 推荐《PHP 5和MySQL 5程序设计》(第三版)讲的东西比较实用,实例也多。 MySQL应该是同时学习的,不要急于接触那些现成的一些类库和框架,把语言基础打好,多写多练多看,网上或者教程里的代码能轻松阅读了以后,再学习框架、类库这些东西,以及SQL数据库的比较高级的查询技巧。可以参考O'Reilly的 《PHP & MySQL Web数据库应 ...
  • 太利害了。 学习的第一步。先学习电机。PLC 和变频器。都是用来控制电机的。所以先学电机。明白电机的工作原理,和机械特性。 变频器由:整流电路,IGBT模块逆变电路,单片机CPU,电解电容,制动单元,等部分组成。学变频器,要知道他的构造,和里面元气件的作用,还有电路的组成。 推荐你从三菱变频器学习。《变频调速技术及应用》这书不错。 加分给我,有空我和你探讨一下。
  • 软件自动化测试的学习,根据松勤公开课里面讲述,大体步骤有: 1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform -> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架。希望对你有帮助。