Установка Solr, сегментация китайских слов и регулярно обновляемый индекс

Solr

Установка и использование Solr

1. Установка

  • 1.Адрес загрузки официального сайтаСкачать напрямую в формате zip
  • 2. Разархивируйте загруженный сжатый пакет, чтобы завершить установку Solr.
  • 3. Откройте DOS, переключите путь на solr_home\bin, выполните команду: solr start –p 8983, запустите solr на порту 8983 и посмотрите на следующую картинку, подтверждающую, что solr успешно запущен. (порт Solr по умолчанию — 8983)

Solr часто используемые команды

solr start -p p_num 启动solr
solr restart -p p_num 重启solr
solr stop -p p_num 关闭solr
solr create -c c_name 创建一个核心
  • 4. Посетите: localhost:8983 в браузере, появятся следующие страницы

На этом установка solr завершена.

2. Создайте ядро

2.1 Подготовка перед созданием ядра

Каждое ядро ​​является экземпляром solr, служба solr может создавать несколько ядер, и каждое ядро ​​можно настроить независимо.

  • 1. Перейдите в каталог solr_home\server\solr, например: E:\solr-8.1.1\server\solr, создайте в этом каталоге папку, имя папки совпадает с именем ядра.
    _v_images/2019062
  • 2. Скопируйте папку conf по пути E:\solr-8.1.1\server\solr\configsets_default в каталог new_core (E:\solr-8.1.1\server\solr\new_core).

2.2 Создание ядра

Способ 1. Откройте интерфейс solr и выполните последовательность операций, как показано на рисунке.

Этот метод должен создать папку New_Core в каталоге E: \ Solr-8.1.1 \ Server \ Solr-8.1.1.

Второй способ: введите команду в каталоге Bin: Solr Создать -C New_core (рекомендуется)

Три, схема

Такой файл конфигурации схемы есть в каждом ядре ядра. Файл схемы может определять тип данных библиотеки индексов и настраивать, будут ли поля индексироваться и сохраняться.Его необходимо настраивать отдельно для жестокости. Типа данных схемы достаточно.Если он не соответствует требованиям, таким как сегментация китайских слов, сегментация слов пиньинь и т. д., вы можете настроить токенизатор. Имя файла конфигурации схемы Solr8.1.1 — управляемая схема, home\server\solr\new_core\conf\managed-schema (E:\solr-8.1.1\server\solr\core_issuer\conf).

3.1 Основные члены схемы

  • (1) fieldType: определите тип поля. Основная функция заключается в определении токенизатора. Токенизатор определяет, как извлекать ключевые слова из документа.
  • (2) анализатор: подэлемент fieldType, представляющий собой токенизатор, состоящий из токенизатора и фильтра. Например
<fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.TurkishLowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_tr.txt" ignoreCase="false"/>
      <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
    </analyzer>
  </fieldType>
  • (3) поле: поле, используемое для создания индекса.Если это поле необходимо для создания индекса, для индексируемого необходимо установить значение true, а для хранимого атрибута необходимо установить значение true. Например:
<field name="age" type="pint" indexed="true" stored="true"/>

3.2 Добавить индексное поле

  • Способ 1. Измените файл конфигурации управляемой схемы напрямую (не рекомендуется, после изменения необходимо перезапустить службу), например:
<field name="age" type="pint" indexed="true" stored="true"/>
  • Способ 2: добавить через страницу solr. (рекомендуется, не нужно перезапускать службу)

![](_v_images/20190623133627274_22114.png =811x)

3.3 Настройка инструмента сегментации китайских слов

  • 1. Скачайте китайский токенизатор IKAnalyzer,ссылка на скачивание, пароль: igt9.
  • 2. Разархивируйте сжатый пакет, каталог выглядит следующим образом:

  • 3. Скопируйте два пакета jar по этому пути: E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib.
  • 4. Кроме того, скопируйте три файла конфигурации по этому пути: E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\classes. Если папки классов нет, создайте новую.
  • 5. Добавьте в схему токенизатор.
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
	  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
	  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
	  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
	  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
  • 6. Добавьте пользовательские фразы на китайском языке в файл ext.dic.

  • Solr необходимо перезапустить

Эффект следующий:

В-четвертых, импортируйте данные индекса (например, данные mysql)

  • 1. Создайте базу данных mysql

  • 2. Создайте новый файл my-data-config.xml в папке solr_home\server\solr\new_core\conf (E:\solr-8.1.1\server\solr\core_issuer\conf) по этому пути.
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr_test"
                user="root" password=""/>
    <document>
        <entity name="user" query="select * from user">
            <field column="id" name="id"/>
            <field column="age" name="age"/>
            <field column="name" name="name"/>
            <field column="hobby" name="hobby"/>
        </entity>
    </document>
</dataConfig>
  • 3. Используйте solr, чтобы добавить поле индекса, соответствующее полю базы данных.После добавления откройте файл управляемой схемы, и вы увидите:
<field name="name" type="string" indexed="true" stored="true"/>
<field name="age" type="pint" indexed="true" stored="true"/>
<field name="hobby" type="string" indexed="true" stored="true"/>

Не добавляйте поле id, это поле уже существует, и если вы его добавите, будет сообщено об ошибке

  • 4. Откройте файл по этому пути: solr_home\server\solr\new_core\conf\solrconfig.xml (E:\solr-8.1.1\server\solr\core_issuer\conf\solrconfig.xml), найдите любой, который то же, что и requestHandler. Добавьте следующую конфигурацию на узел уровня. Как показано на рисунке:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
	<lst name="defaults">
		<str name="config">my-data-config.xml</str>
	</lst>
</requestHandler>
  • 5. Скопируйте solr-dataimporthandler-8.1.1.jar и драйвер MySQL (просто найдите драйвер MySQL) в каталоге solr_home\dist (E:\solr-8.1.1\dist) в solr_home\server\solr-webapp\ webapp Каталог \WEB-INF\lib (E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib).
  • 6. Перезапустите службу Solr.
  • 7. Откройте страницу решения и выполните следующие операции.

  • 8. Проверьте, успешно ли импортированы данные

Если сегментация китайских слов выполняется в поле индекса

При добавлении пары полей индекса тип файла: выберите text_ik

Эффект показан на рисунке: ЗапросЛюкси Кемикалрезультат

В-пятых, использование Java-клиента solrJ

5.1 Импорт памяти

<!--solr -->
<dependency>
	<groupId>org.apache.solr</groupId>
	<artifactId>solr-solrj</artifactId>
	<version>8.1.1</version>
</dependency>

5.2 Написание модели

public class User {

    @Field(value = "id")
    private String id;
    @Field(value = "name")
    private String name;
    @Field(value = "age")
    private Integer age;
    @Field(value = "hobby")
    private String hobby;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", hobby=" + hobby +
                '}';
    }
}

5.3 Напишите тестовый код

public class Main {
    private static final String SOLR_URL = "http://localhost:8888/solr";
    private static final String CORE_NAME = "new_core";
    public static void main(String[] args) throws IOException, SolrServerException {
        HttpSolrClient client = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
        SolrQuery query = new SolrQuery();
        //设置要查询的字段
        query.setFields("id","name", "age","hobby");
        //查询全部
        QueryResponse response = client.query(CORE_NAME,query);
        //查询结果
        SolrDocumentList results = response.getResults();
        System.out.println("结果总数:" + results.getNumFound());
        //遍历列表
        System.out.println("文档结果:");
        for (SolrDocument doc : results) {
            System.out.printf("[id:%s,name:%s,age:%s,hobby:%s]\n", doc.get("id"), doc.get("name"), doc.get("age"), doc.get("hobby"));
        }
        //得到实体对象
        List<User> userList = response.getBeans(User.class);
        System.out.println("转为实体对象:\n"+Arrays.toString(userList.toArray()));
    }
}

**Одиночный запрос по условию: **

//查询name为“陈龙”的user
query.set("q","name:陈龙" );

запрос фильтра

//查询name为“陈龙”的user
query.set("q","name:陈龙" );

6. Регулярное перестроение индекса в реальном времени и добавочное обновление

Готов к работе:

  • 1. Загрузите jar-пакет: solr-dataimportscheduler-1.1.jar (в Интернете есть и версия 1.0, но, пожалуйста, найдите соответствующую версию solr самостоятельно)ссылка на скачивание

**Обратите внимание (важные вещи говорят три раза): при версии solr7+ выше будут проблемы с пакетом jar.После настройки сервер начнет выдавать ошибку, а страница будет 404. Конкретные подробности последует решение. **

Общий доступ к диску в личной сети: ссылка:Диск.baidu.com/is/1HT9WZ XQ X...Код извлечения: ehju

Это отлично работает для версии 7+

  • 2. Создайте новый файл: dataimport.properties. Просто скопируйте файл ниже. Конкретное значение конфигурации было прокомментировано:
 
#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################
 
#  to sync or not to sync
#  1 - active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
 
#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
#  修改成你所使用的core,我这里是我自定义的core:simple
syncCores=core_issuer
 
#  solr server name or IP address
#  [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
 
#  solr server port
#  [defaults to 80 if empty]
#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8983
 
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
#  这里默认不改
webapp=solr
 
#  URL params [mandatory]
#  remainder of URL
#  这里改成下面的形式,solr同步数据时请求的链接  (我这里使用的 full-import )
params=/dataimport?command=full-import&clean=true&commit=true
 
#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
#  开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
 
#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
 
#  重做索引的参数
reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true
 
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00

Подготовьте этот пакет jar и файл dataimport.properties, выполните следующие шаги...

  • Шаг 1. Скопируйте пакет solr-dataimportscheduler.jar в E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib.
  • Шаг 2. Добавьте конфигурацию мониторинга (перед меткой) в файл web.xml в каталоге E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF:
 <listener>
   <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
 </listener>

Примечание (еще одно примечание): после org.apache.solr.handler.dataimport.scheduler.ApplicationListener нельзя ставить пробелы, иначе может быть сообщено об ошибке, и найти причину проблемы будет сложно.

  • Шаг 3: Создайте новую папку conf в каталоге \solrhome (тот же каталог, что и простая папка) и поместите файл dataimport.properties в папку conf.
  • Шаг 4: Перезапустите tomcat и войдите в Solr.

Семь, два метода удаления библиотеки индексов (удалить все данные)

  • 1. Метод 1 для удаления всех данных в библиотеке индексов: удаление непосредственно с помощью визуального интерфейса solr.

  • 2. Способ 2 удаления всех данных в библиотеке индексов: удалить все данные методом solrClient
@Test
    public void deleteAll(){
        try {
            searchCrawlerProductService.deleteAll();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
public RestResult deleteAll(){
        try {
            log.debug("删除所有索引");
 
            solrClient.deleteByQuery("*:*");  //把删除的条件设置为"*:*"就可以了
            solrClient.commit();
 
            log.debug("全部删除成功");
        } catch (Exception e) {
            log.debug("删除全部索引失败");
 
            e.printStackTrace();
        }
 
        return RestResult.success("删除索引库成功");
    }