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 >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. 修改查询返回数据排名
<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可以看到最终的打分
待续......