solr配置实例

一、下载apache-solr-3.4.0.zip,解压缩,配置apache-solr-3.4.0.war到tomcat目录:
<Context path="/solr" docBase="E:\code\apache-solr-3.4.0.war" debug="0" reloadable="false">
   <Environment name="solr/home" type="java.lang.String" value="E:\data" override="true" />
</Context>


二、配置E:\data目录:
a、solr.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
   <cores adminPath="/admin/cores" defaultCoreName="core0">
       <core name="core0" instanceDir="core0" />
   </cores>
</solr>

b、新建core0\conf目录:
c、schema.xml:
<?xml version="1.0" ?>

<schema name="core0" version="1.1">
   <types>
     <fieldType name="int" class="solr.IntField" omitNorms="true"/>
//新版本不建议使用。建议使用。其中老版本中pint不支持范围查询,请使用tint
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
 
   

     <fieldType name="text_general" class="solr.TextField">
           <analyzer type="index">
               <tokenizer class="solr.StandardTokenizerFactory "/>
              <filter class="solr.LowerCaseFilterFactory"/>
              <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
              <!--in this , we will only use synonyms at query time
              <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>-->
               <filter class="solr.StandardFilterFactory"/>
              <!--<filter class="solr.RemoveDuplicatesTokenFil terFactory"/>-->
           </analyzer>
           <analyzer type="query">
               <tokenizer class="solr.StandardTokenizerFactory "/>
              <filter class="solr.LowerCaseFilterFactory"/>
              <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
              <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>             
              <filter class="solr.StandardFilterFactory"/>
              <!--<filter class="solr.RemoveDuplicatesTokenFil terFactory"/>-->
           </analyzer>
       </fieldType>
   </types>

  <fields>   
   <!-- general -->
   <field name="id"           type="int"     indexed="true"   stored="true"   multiValued="false" required="true"/>
   <field name="name"       type="text_general"     indexed="true"   stored="false"   multiValued="false" />
   <field name="content" type="text_general"     indexed="true"   stored="false"   multiValued="false" />
  </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>content</defaultSearchField>

  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
  <solrQueryParser defaultOperator="OR"/>

  <copyField source="name" dest="content"/>

</schema>


d、solrconfig.xml:
<?xml version="1.0" encoding="UTF-8" ?>

<!--
  This is a stripped down config file used for a simple example... 
  It is *not* a good example to work from.
-->
<config>
   <luceneMatchVersion>LUCENE_34</luceneMatchVersion>
   <!--   The DirectoryFactory to use for indexes.
               solr.StandardDirectoryFactory , the default, is filesystem based.
               solr.RAMDirectoryFactory is memory based, not persistent, and doesn't work with replication. -->
   <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory }"/>


   <updateHandler class="solr.DirectUpdateHandler2" >
       <autoCommit> 
          <maxDocs>1000</maxDocs>
          <maxTime>240000</maxTime> 
       </autoCommit>
    </updateHandler>

   <requestDispatcher handleSelect="true" >
       <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB ="2048" />
   </requestDispatcher>
 
   <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
   <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
   <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
         
   <!-- config for the admin interface -->
   <admin>
       <defaultQuery>*:*</defaultQuery>
   </admin>

</config>

e:stopwords.txt、synonyms.txt暂时使用默认压缩包里的文件。

三、启动tomcat
通过http://localhost:8080/solr 访问solr管理台。设置URIEncoding="UTF-8",否则通过管理台输入类似:
content:"中国人" ,后台接受数据会乱码。

四、使用solrj访问solr服务:
<dependency>
         <groupId>org.apache.solr</groupId>
         <artifactId>solr-solrj</artifactId>
         <version>3.4.0</version>
</dependency>

也可以直接使用标签org.apache.solr.client.solrj.beans.Field绑定model,直接add model即可。
public class SolrTest {

       private static SolrServer server;

       @BeforeClass
       public static void init() throws MalformedURLException {
              String url = "http://192.168.0.75:9090/solr/";
              server = new CommonsHttpSolrServer(url);
               // 提升性能采用流输出方式
              server.setRequestWriter(new BinaryRequestWriter());
       }

       @Test
       public void testAdd() throws Exception {
              SolrInputDocument doc = new SolrInputDocument();
              doc.addField("id", new Integer(1));
              doc.addField("name", "测试标题");
              doc.addField("content", "123");
              server.add(doc);
              server.commit();
       }

       @Test
       public void testQuery() throws Exception {
              SolrQuery query = new SolrQuery();
              query.setQuery("*:*");
              query.setStart(0);
              query.setRows(25);

               //如果要高亮显示,则必须stored=true
               query.addHighlightField("content");
              query.setHighlightSimplePre("<font color='red'>");
              query.setHighlightSimplePost("</font>");
              QueryResponse rsp = server.query(query);
              SolrDocumentList docs = rsp.getResults();
              System.out.println("qtime :" + rsp.getQTime());
              for (SolrDocument doc : docs) {
                     System.out.println("-----");
                     System.out.println(doc.getFieldValue("id"));
              }
       }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值