solr部署到tomcat和部分简单使用配置

1. 部署solr example到tomcat

1.1 新建配置${SOLR_HOME},随意在硬盘上建立一个文件夹既可;

1.2 将下载后的solr解压,将contrib和dist拷贝到${SOLR_HOME}下;

1.3 将目录solr-4.5.0\example\webapps下的solr.war复制到tomcat中,启动tomcat解压war包,tomcat报错关闭,将solr.war删除,剩下解压后的solr目录;

1.4 将solr-4.5.0\example里边的文件全部拷贝到${SOLR_HOME}下

1.5 将tomcat中的solr目录打开,例如apache-tomcat-7.0.11\webapps\solr\WEB-INF新建classes目录,在classes目录中新建log4j.properties,自己配置

1.6 修改apache-tomcat-7.0.11\webapps\solr\WEB-INF\web.xml,添加:

<env-entry>

  <env-entry-name>solr/home</env-entry-name>

  <env-entry-value>${solr_home}路径</env-entry-value>

  <env-entry-type>java.lang.String</env-entry-type>

</env-entry>

1.7 将\solr-4.5.0\example\lib\ext中所有jar包拷贝到tomcat的lib目录下或者solr的lib目录下

1.8 启动tomcat搞定


2. solr字段配置使用自动生成ID

2.1 在schema.xml中添加UUID的filedType

<fieldType name="uuid"class="solr.UUIDField" indexed="true" />

2.2 将id的type改为uuid,同时添加default=”NEW”,不需要required="true"属性

<field name="id"type="uuid" indexed="true" stored="true" default="NEW"multiValued="false"/>

2.3 将<uniqueKey>id</uniqueKey>删除


3. 从数据库导入数据到solr中并创建索引

3.1 在solrconfig.xml中添加dataimport:

<requestHandlername="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">    

   <lst name="defaults">   

     <str name="config">data-config.xml</str>   

   </lst>   

 </requestHandler>

3.2 data-config.xml的内容,例如:

<?xml version="1.0"encoding="utf-8"?>   

<dataConfig> 

 <dataSource type="JdbcDataSource"

    driver="oracle.jdbc.driver.OracleDriver"   

    url="jdbc:oracle:thin:@XXX.XXX.XX.XX:XXXX:XXX"   

    user="XXX"   

    password="XXX"/> 

 <document name="cms"> 

    <entity name="user_info" pk="ID"query="select id, product_number from t_hgcmall_user_info"

            deltaImportQuery="select id,product_number from t_hgcmall_user_info where id ='${dataimporter.delta.ID}'"

             deltaQuery="select id fromt_hgcmall_user_info where last_modified &gt;to_date('${dataimporter.last_index_time}', 'YYYY-MM-DDHH24:MI:SS')">   

       <field column="id" name="id" />   

       <field column="product_number"name="product_number" /> 

    </entity> 

 </document>  

</dataConfig>

注:其中的pk=”ID”ID必须是大写,ID指的是deltaQuery中查询的主键名

<fieldcolumn="id" name="id" />这些信息可有可无,经过测试数据导入时是按照sql中查询的信息名来保存的

其中query是用于全量导入数据

deltaImportQuery是用于增量导入数据

deltaQuery是用于查询增量导入数据的主键

下面是另一个例子:

<dataConfig>

<dataSourcedriver="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/users" user="users" password="secret"/>

<script><![CDATA[functionsplitName(row) {

varnameTable = row.get('user_name').split(' ');

row.put('firstname',nameTable[0]);

row.put('surname',nameTable[1]);

row.remove('name');

returnrow;

}]]>

</script>

<document>

<entityname="user" transformer="script:splitName"query="SELECT user_id,user_name, description from users">

<fieldcolumn="user_id" name="id" />

<fieldcolumn="firstname" />

<fieldcolumn="surname" />

<fieldcolumn="description" />

</entity>

</document>

</dataConfig>


4. 优化主键索引

4.1 schema.xml中添加或修改:

<fieldType name="string_pulsing"class="solr.StrField" postingsFormat="Pulsing40"/>

<field name="id"type="string_pulsing" indexed="true" stored="true"required="true" />

 

4.2 solrconfig.xml中添加:

<codecFactory class="solr.SchemaCodecFactory"/>


5. 修改查询返回数据排名


5.1 solrconfig.xml中添加:

<searchComponent name="elevator"class="solr.QueryElevationComponent" >

    <strname="queryFieldType">string</str>

    <strname="config-file">elevate.xml</str>

</searchComponent>

<requestHandlername="/promotion" class="solr.SearchHandler">

    <lstname="defaults">

        <strname="echoParams">explicit</str>

        <intname="rows">10</int>

        <strname="df">name</str>

    </lst>

    <arrname="last-components">

        <str>elevator</str>

    </arr>

</requestHandler>


5.2 新增elevate.xml,例如:

<?xml version="1.0" encoding="UTF-8" ?>

<elevate>

    <querytext="solr">

    <doc id="3"/>

<doc id="1" />

<doc id="2"exclude="true" />    --  如果不想显示某一条记录

</query>

</elevate>


6. 配置拼写检查功能(联想搜索)

在solrconfig.xml中添加如下配置:

<searchComponent name="spellcheck"class="solr.SpellCheckComponent">

    // 配置的是要进行检查的字段类型,如果不存在这个类型会自动提取当前字段类型,所以这个可以不需要配置

    <strname="queryAnalyzerFieldType">textSpell</str>

    <lstname="spellchecker">

      <strname="name">default</str>

     // 配置的是要进行检查的字段

      <strname="field">name</str>

     // 配置的是生产的索引保存路径

      <strname="spellcheckIndexDir">D:/software/apache-tomcat-7.0.11/webapps/solr/WEB-INF/classes/</str>

      // 下边这个在实际中不建议配置

      <strname="buildOnCommit">true</str>

    </lst>

  </searchComponent>

 

  <requestHandlername="/search" class="solr.SearchHandler" default="true">

     <lstname="defaults">

       <strname="echoParams">explicit</str>

       <intname="rows">10</int>

       <strname="spellcheck">true</str>

       <strname="spellcheck.collate">true</str>

     </lst>

      <arrname="first-components">

        <str>spellcheck</str>

      </arr> 

</requestHandler>


注:其他具体参数可以在官网上查看:http://wiki.apache.org/solr/SpellCheckComponent


7. 自定义查询结果排序(字段权重方式)

使用dismax

例如:qf: name type   pf: name^0.5type^0.1

这样返回的查询结果将倾向于name的排序

其中 fl 配置为*,score可以看到最终的打分


待续......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值