solr使用流程

一、定义


Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。


基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎 


二 、搭建服务:

 参见 点击打开链接 


三、创建任务 


 当你的环境以安装solr服务 后,按照自己想要实现的功能创建自己的solr 任务 


距离 我想创建一个 testQuery  

1.在solr目录下 执行:./bin/solr create -c   testQuery   (创建成功 会有一个成功提示的  ,到目前为止solr 里面已经有一个为某一个)

   此时在solr/server/solr 下面出现 testQuery   目录

2.启动solr :   ./bin/solr restart   


3.testQuery   目录结构 :


主要修改 都在conf下面 

conf 目录结构:


data-config.xml文件 是添加索引  表结构 的 ,当每次将数据库数据导入solr 时候需要按照这个文件定义的结构去导入


<dataConfig>  
    <dataSource type="JdbcDataSource"  
        driver="com.mysql.jdbc.Driver"  
        url="jdbc:mysql://11.11.11.11:800/database"  
        user="root" password="123456"/>  
    <document>  
        <entity name="database" query="SELECT * FROM table;  "    
 deltaQuery="SELECT id  FROM table  where  `create` > unix_timestamp('${dataimporter.last_index_time}' ;  "   
  deltaImportQuery="SELECT * FROM table where id =${dataimporter.delta.tid}"  pk='tid'>  
            <field column="id" name="id" />  
            <field column="subject" name="subject" />  
            <field column="views" name="views" />  
           <field column="vip" name="vip" />  
            <field column="message" name="message" />  
            <field column="create" name="create" />  
        </entity>  
    </document>  
</dataConfig>  

 dataConfig 里面是对数据库导入的一个配置

   dataSource:数据库连接配置

   document:数据库索引配置

       entity:name= 数据库名字

                   query=全量导入数据的sql

                  deltaQuery:增量导入的id

                  deltaImportQuery:增量导入的sql  

 解释一下全量和增量:正常数据库导入solr第一次是全部导入,但是随着时间的变化数据库和solr数据不一致,这时候需要再次导入,按时间技术,半小时或者更合适的时间,只需要增量导入即可,更合适的时间再次全量导入即可

               field  这些是返回字段的定义

 

==到现在数据库和solr的关系完事了,下面是solr自身对这些字段的处理


schema.xml  是被 solrconfig.xml 加载或者调用的  ,负责设置 每次查询的展示字段 、负责设置关联查询、负责设置停止词 近义词 的 设置 


<schemaFactory class="ManagedIndexSchemaFactory">  
      <bool name="mutable">true</bool>  
      <str name="managedSchemaResourceName">managed-schema</str>  
 </schemaFactory>  

在conf下面的 managed-schema 文件里对索引配置

 1.配置中文分词mmseg4j

<!-- mmseg4j-->  
    <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer type="index">    
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>    
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>  
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
        </analyzer>  
        <analyzer type="query">  
           <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>   
           <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>  
           <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
        </analyzer>  
    </fieldType>    
    <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer>    
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>  
        </analyzer>    
    </fieldType>  
    <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" >    
        <analyzer>    
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/>       
        </analyzer>    
        </fieldType>  
    <!-- mmseg4j-->  

solr-5.5.3/server/solr/discuz/conf/dic:中文分词的分词库目录,在改目录下放word.dic分词文件

 stopwords.txt:停词文件

 synonyms.txt:近义词文件

    analyzer type="index":索引检查分词、停词、近义词

   analyzer type="query":查找检查分词、停词、近义词

2.配置索引字段、字段类型、查询字段的中文分词类型


<field name="submes" type="<span style="color: #ff6600;">text_mmseg4j_complex</span>" indexed="true" stored="true" required="true" multiValued="true" />  
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="vip" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="views"    type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="create" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="subject" type="string" indexed="true" stored="true" required="true" multiValued="false" />  
<field name="message" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />  
<copyField source="subject" dest="submes" />  
<copyField source="vip" dest="submes" />  
<copyField source="views" dest="submes" />  
<copyField source="create" dest="submes" />  

 field 字段定义了solr展示的类型

   name:字段名字

   type:字段类型(如果是要进行查询的字段,类型为中文分词类型如:text_mmseg4j_complex)

   indexed:true

    stored:true

   required:true

        multiValued:查询字段设置为true ,其他为false

copyField : 拷贝需要索引的字段到整合字段中 submes是本列子中的整合字段  solr查询也是查询这个字段

  这个字段可以根据多个字段进行权重设置,并且打分,排序



五.使用

1.增量导入,在你的solr使用界面上左边下拉框找到discuz 

  下面出现的

  Dataimport: 是执行增量全量导入的

  query:搜索

  analysis:分词

 

 

无法加载图片,根据很难形容,但是打开这个界面就知道了

 

2.搜索打分:有的时候我们除了想根据匹配度排序外,还想根据浏览量、创建时间、是否是vip等综合因素排序,

在curl请求时 请求参数要加上下面的值:

       $params['defType'] = 'edismax' ;

       $params['bf'] = "sum(linear(vip,1000,0),linear(sqrt(log(linear(views,1,2))),100,0),sqrt(log(create)))";

    

  bf里面的参数是solr支持的打分标准的函数,具体使用参考点击打开链接详解  很不完善,后续还会完善,如有问题随时提问




1 概述 4 1.1 企业搜索引擎方案选型 4 1.2 Solr的特性 4 1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录结构说明 8 1.4.2 Solr home说明 9 1.4.3 solr的各包的说明 10 1.5 版本说明 11 1.5.1 1.3版本 11 1.5.2 1.4版本 12 1.6 分布式和复制 Solr 架构 13 2 Solr的安装与配置 13 2.1 在Tomcat下Solr安装 13 2.1.1 安装准备 13 2.1.2 安装过程 14 2.1.3 验证安装 15 2.2 中文分词配置 15 2.2.1 mmseg4j 15 2.2.2 paoding 19 2.3 多核(MultiCore)配置 22 2.3.1 MultiCore的配置方法 22 2.3.2 为何使用多core ? 23 2.4 配置文件说明 23 2.4.1 schema.xml 24 2.4.2 solrconfig.xml 25 3 Solr的应用 29 3.1 SOLR应用概述 29 3.1.1 Solr的应用模式 29 3.1.2 SOLR使用过程说明 30 3.2 一个简单的例子 30 3.2.1 Solr Schema 设计 30 3.2.2 构建索引 30 3.2.3 搜索测试 31 3.3 搜索引擎的规划设计 32 3.3.1 定义业务模型 32 3.3.2 定制索引服务 34 3.3.3 定制搜索服务 34 3.4 搜索引擎配置 34 3.4.1 Solr Schema 设计(如何定制索引的结构?) 34 3.5 如何进行索引操作? 36 3.5.1 基本索引操作 36 3.5.2 批量索引操作 37 3.6 如何进行搜索 39 3.6.1 搜索语法 39 3.6.2 排序 42 3.6.3 字段增加权重 42 3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 Reading Data from Solr 51 4.3 创建查询 51 4.4 使用 SolrJ 创建索引 52 4.5 Solrj包的结构说明 53 4.5.1 CommonsHttpSolrServer 53 4.5.2 Setting XMLResponseParser 53 4.5.3 Changing other Connection Settings 53 4.5.4 EmbeddedSolrServer 54 5 Solr的实际应用测试报告 54 5.1 线下压力测试报告 54 5.2 线上环境运行报告 54 6 solr性能调优 55 6.1 Schema Design Considerations 55 6.1.1 indexed fields 55 6.1.2 stored fields 55 6.2 Configuration Considerations 55 6.2.1 mergeFactor 55 6.2.2 mergeFactor Tradeoffs 56 6.3 Cache autoWarm Count Considerations 56 6.4 Cache hit rate(缓存命中率) 56 6.5 Explicit Warming of Sort Fields 56 6.6 Optimization Considerations 56 6.7 Updates and Commit Frequency Tradeoffs 56 6.8 Query Response Compression 57 6.9 Embedded vs HTTP Post 57 6.10 RAM Usage Considerations(内存方面的考虑) 57 6.10.1 OutOfMemoryErrors 57 6.10.2 Memory allocated to the Java VM 57 7 FAQ 58 7.1 出现乱码或者查不到结果的排查方法: 58
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值