在Tomcat上设置和使用Apache Solr

前一阵子花了一点时间来玩Solr,但立即被我们可以在一些更大的数据集上获得的性能所震撼。
这是我的一些初始设置和配置学习信息,也许可以帮助某人启动它并更快地运行。
首先在Windows上进行设置。

下载并解压缩Apache TomcatSolr,然后将其复制到您的工作文件夹中。

Tomcat设置

如果要将tomcat作为服务使用以下方法进行安装:
bin \ service.bat安装
在conf。下编辑tomcat用户:

<role rolename="admin"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="admin,manager-gui"/>

如果要使用HTTP-GET使用国际字符(> 127)查询Solr,则必须通过接受百分比编码的UTF-8将Tomcat配置为符合URI标准。 添加:URIEncoding ='UTF-8'

<connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
URIEncoding="UTF-8" />

到conf / server.xml

将example \ solr的内容复制到solr主目录D:\ Java \ apache-solr-3.6.0 \ home
在$ CATALINA_HOME / conf / Catalina / localhost / solr.xml上创建指向您的Solr主目录的代码片段。

<?xml version="1.0" encoding="UTF-8"?>
<context docBase="D:\Java\apache-tomcat-7.0.27\webapps\solr.war" debug="0" crossContext="true" >
    <environment name="solr/home" type="java.lang.String" value="D:\Java\apache-solr-3.6.0\home" override="true" />
</Context>

启动tomcat,登录,部署solr.war。

Solr设置

它应该在http:// localhost:8080 / solr / admin /上可用。要使用SolrJ创建快速测试,创建并读取数据:抓取以下Maven库:

<dependency>
       <groupid>org.apache.solr</groupId>
       <artifactid>apache-solr-solrj</artifactId>
       <version>3.6.0</version>
       <type>jar</type>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>org.apache.httpcomponents</groupId>
       <artifactid>httpclient</artifactId>
       <version>4.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>org.apache.httpcomponents</groupId>
       <artifactid>httpcore</artifactId>
       <version>4.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>org.apache.james</groupId>
       <artifactid>apache-mime4j</artifactId>
       <version>0.6.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>org.apache.httpcomponents</groupId>
       <artifactid>httpmime</artifactId>
       <version>4.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>org.slf4j</groupId>
       <artifactid>slf4j-api</artifactId>
       <version>1.6.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>commons-logging</groupId>
       <artifactid>commons-logging</artifactId>
       <version>1.1.1</version>
       <scope>compile</scope>
   </dependency>
   <dependency>
       <groupid>junit</groupId>
       <artifactid>junit</artifactId>
       <version>4.9</version>
       <scope>test</scope>
   </dependency>

JUnit测试:

package za.co.discovery.ecs.solr.test;
 
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
 
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
 
 
@RunWith(JUnit4.class)
public class TestSolr {
 
    private SolrServer server;
 
 
    /**
     * setup.
     */
    @Before
    public void setup() {
        server = new HttpSolrServer("http://localhost:8080/solr/");
        try {
            server.deleteByQuery("*:*");
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * Test Adding.
     *
     * @throws MalformedURLException error
     */
    @Test
    public void testAdding() throws MalformedURLException {
 
        try {
 
            final SolrInputDocument doc1 = new SolrInputDocument();
            doc1.addField("id", "id1", 1.0f);
            doc1.addField("name", "doc1", 1.0f);
            doc1.addField("price", 10);
 
            final SolrInputDocument doc2 = new SolrInputDocument();
            doc2.addField("id", "id2", 1.0f);
            doc2.addField("name", "doc2", 1.0f);
            doc2.addField("price", 20);
 
            final Collection<solrinputdocument> docs = new ArrayList<solrinputdocument>();
            docs.add(doc1);
            docs.add(doc2);
 
            server.add(docs);
            server.commit();
 
            final SolrQuery query = new SolrQuery();
            query.setQuery("*:*");
            query.addSortField("price", SolrQuery.ORDER.asc);
            final QueryResponse rsp = server.query(query);
 
            final SolrDocumentList solrDocumentList = rsp.getResults();
 
            for (final SolrDocument doc : solrDocumentList) {
                final String name = (String) doc.getFieldValue("name");
                final String id = (String) doc.getFieldValue("id"); //id is the uniqueKey field
                System.out.println("Name:" + name + " id:" + id);
            }
 
        } catch (SolrServerException e) {
            e.printStackTrace();
            Assert.fail(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            Assert.fail(e.getMessage());
        }
    }
 
}

直接从数据库添加数据

首先,您需要将相关的数据库库添加到添加的类路径中。 然后按如下所示创建data-config.xml,如果需要自定义字段,则可以在dataconfig.xml下方显示的schema.xml中的fields标记下指定这些字段

<dataconfig>
 <datasource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1525:DB" user="user" password="pass"/>
    <document name="products">
        <entity name="item" query="select * from demo">
            <field column="ID" name="id" />
            <field column="DEMO" name="demo" />
 
            <entity name="feature" query="select description from feature where item_id='${item.ID}'">
                <field name="features" column="description" />
            </entity>
            <entity name="item_category" query="select CATEGORY_ID from item_category where item_id='${item.ID}'">
                <entity name="category" query="select description from category where id = '${item_category.CATEGORY_ID}'">
                    <field column="description" name="cat" />
                </entity>
            </entity>
        </entity>
    </document> 
</dataConfig>

schema.xml中的一个自定义字段:

<fields>
  <field name="DEMO" type="string" indexed="true" stored="true" required="true" /> 
</fields

添加到solrconfig.xml中,确保指向data-config.xml,处理程序必须在solrconfig.xml中注册,如下所示

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  <lst name="defaults">
    <str name="config">data-config.xml</str>
  </lst>
</requestHandler>

完成所有设置后,可以使用以下操作完成完全导入:
http:// localhost:8080 / solr / admin / dataimport?command = full-import

这样一来,您就可以快速进行闪电般的数据检索了。

参考: Zen上的 JCG合作伙伴 Brian Du Preez在IT博客上通过TomcatApache上设置和使用Apache Solr


翻译自: https://www.javacodegeeks.com/2012/10/setting-up-and-playing-with-apache-solr.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值