Статьи

Настройка и игра с Apache Solr на Tomcat

Некоторое время назад у a было немного времени, чтобы поиграть с Solr, и он был поражен производительностью, которую мы смогли достичь с некоторыми из наших больших наборов данных.
Вот некоторые из моих начальных уроков по настройке и настройке, которые, возможно, помогут кому-то запустить его немного быстрее.
Начиная с настройки обоих окон.

Загрузите и распакуйте Apache Tomcat и Solr и скопируйте их в рабочие папки.

Настройка Tomcat

Если вы хотите использовать tomcat в качестве службы, установите его, используя следующее:
bin \ service.bat установить
Отредактируйте пользователей tomcat под conf .:

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

Если вы собираетесь запрашивать Solr, используя международные символы (> 127), используя HTTP-GET, вы должны настроить Tomcat на соответствие стандарту URI, принимая кодировку UTF-8 в процентах. Добавить: URIEncoding = ‘UTF-8 ′

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

в conf / server.xml

Скопируйте содержимое примера \ solr в ваш домашний каталог solr D: \ Java \ apache-solr-3.6.0 \ home
создайте фрагмент кода в $ CATALINA_HOME / conf / Catalina / localhost / solr.xml, указывающий на ваш домашний сайт.

1
2
3
4
<?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 Setup

Он должен быть доступен по адресу http: // localhost: 8080 / solr / admin /. Чтобы создать быстрый тест с использованием SolrJ, создает и считывает данные: возьмите следующие библиотеки Maven:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<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 test:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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, как показано ниже, если вам требуются настраиваемые поля, они могут быть указаны под тегом fields в schema.xml, показанном под dataconfig.xml.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<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:

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

Добавьте в solrconfig.xml и укажите data-config.xml, обработчик должен быть зарегистрирован в solrconfig.xml следующим образом

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

После того, как все это настроено, полный импорт можно выполнить с помощью следующего:
HTTP: // локальный: 8080 / Solr / администратор / dataimport команда = полный импорт

Тогда вам следует хорошо провести молниеносный поиск данных.

Ссылка: Настройка и игра с Apache Solr на Tomcat от нашего партнера по JCG Брайана Дю Приза в блоге Zen в области искусства .