建立D:\lucene\solr4.9.1\home
复制E:\学习\搜索引擎\软件\4.9.1\solr-4.9.1\example\multicore下所有文件进入D:\lucene\solr4.9.1\home
1、solr-4.6.0\example\lib\ext 下所有的jar文件复制到 tomcat的lib目录下
2、solr-4.6.0\example\resources 下的log4j.properties文件复制到 tomcat的lib目录下
3、solr-4.6.0\dist下的solr-4.6.0.war文件复制到 tomcat8\webapps 下,并且启动tomcat
4、删除tomcat8\webapps 下的solr-4.6.0.war文件,此时会有solr-4.6.0的文件夹,然后将其改名为solr, 拷贝到D:\lucene\solr4.9.1\home目录下。
5、C:\tomcat-7.0.39\conf下的server.xml文件中进行如下设置:
<Context path="/solr" docBase="D:\lucene\solr4.9.1\server\solr" reloadable="false">
<Environment name="solr/home" type="java.lang.String" value="D:\lucene\solr4.9.1\home" override="true"/>
</Context>
D:\lucene\solr4.9.1\home\solr.xml打开修改
<solr persistent="false">
<cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
<core name="core0" instanceDir="core0" />
<core name="core1" instanceDir="core1" />
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
</shardHandlerFactory>
</cores>
修改为
<solr persistent="true">
<cores adminPath="/admin/cores" defaultCoreName="core0">
<core name="core0" instanceDir="core0" />
<shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
<str name="urlScheme">${urlScheme:}</str>
</shardHandlerFactory>
</cores>
solr/dist目录下solr-core.jar solr-solrj.jar 考入工程,供工程使用.
solr/dist/solr-lib/下所有 jar拷入工程,供工程使用
23.solr4.6索引的相关操作
D:\lucene\solr4.9.1\home\core0\conf\solrconfig.xml
打开文件。加入如下代码
<!-- realtime get handler, guaranteed to return the latest stored fields
of any document, without the need to commit or open a new searcher. The current
implementation relies on the updateLog feature being enabled. -->
<requestHandler name="/get" class="solr.RealTimeGetHandler">
<lst name="defaults">
<str name="omitHeader">true</str>
</lst>
</requestHandler>
<!-- 新加入的-->
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">name,content,testik</str>
<str name="qf">
name^11.0 content^3.0
</str>
</lst>
</requestHandler>
<!-- 新加入的-->
修该如下代码。把大小都加入了个0
<requestDispatcher handleSelect="true" >
<requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="20480" formdataUploadLimitInKB="20480" />
</requestDispatcher>
schema.xml文件中 ,请查阅文档,弄懂omitNorms precisionStep positionIncrementGap什么意思。
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
修改如下:
<types>
<!--IKAnalyzer-->
<fieldType name="text" class="solr.TextField" autoGeneratePhraseQueries="false">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="4" positionIncrementGap="0"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="4" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="4" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="4" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="4" positionIncrementGap="0"/>
</types>
<fields>
<!-- general -->
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="content" type="string" indexed="true" stored="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="true" multiValued="false" />
<field name="core0" type="string" indexed="true" stored="true" multiValued="false" />
<field name="testik" type="text" indexed="true" stored="true" multiValued="false" />
<!-- name,content-->
<field name="name_content" type="string" indexed="true" stored="true" multiValued="true" />
</fields>
<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>name_content</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>
<!-- multi field-->
<copyField source="name" dest="name_content" />
<copyField source="content" dest="name_content" />
IKAnalyzer2012FF_u1.jar文件考入D:\solr-4.9.1\server\solr\WEB-INF\lib
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">name,content,testik</str>
<str name="qf">
name^11.0 content^3.0
</str>
</lst>
</requestHandler>
qf指定搜索字段
SolrQuery query = new SolrQuery(condition);
query.setParam("df", "msg_title,msg_content")
程序中设定的搜索字段优先级大于schema.xml文件中配置的默认搜索字段。<defaultSearchField>name</defaultSearchField>
condition=“name:中国”
若在搜索条件中加入搜索字段,优先级大于solrconfig.xml中配置的<str name="qf">
name^11.0 content^3.0
</str>
condition=“name:中国 OR content:xxx”也可以检索 AND
String[] filds = {"name","content"};
query.setFields(filds);
query.setHighlight(true)
.setHighlightSimplePre("<span class='lighter'>")
.setHighlightSimplePost("</span>")
.setParam("hl.fl", "msg_title,msg_content")
======上面是3.x高亮字段写法,下面是4.x写法
query.setHighlight(true)
.setHighlightSimplePre("<span class='lighter'>")
.setHighlightSimplePost("</span>")
..setHighlightField("msg_title,msg_content")
//显示的字数
params.setHighlightFragsize(10);
//排序
params.addSort("age", ORDER.desc);
//过滤 搜索后的内容name包含中国的显示出来
// String[] fqs = {"name:中国"};
// params.addFilterQuery(fqs);