Конфигурация Apache Solr™

Практика по информационному поиску

Опрос

  • Все ли принесли ноутбуки?

  • Кто поставил себе Solr?

  • Кто перепрошел getting started?

  • Кто заглядывал дальше?

План:

  • Solr Administration UI
  • schema.xml
  • Архитектура Solr
  • Разбор компонентов
  • Вариации запросов

Solr Administration UI

  • Посмотреть самим: http://bit.ly/solr-admin-gui
  • Не разбираем потому что:
    • Скучно
    • Слишком легко
    • Часто меняется

Как Solr видит мир

  • Базовая единица - документ (document)
  • Документ содержит поля (fields)
  • Имена полей определяются заранее
  • Полям задаются типы

 

{

    "id" : 3,

    "author" : "Хемингуэй",

    "quote" : "Голод хорошо дисциплинирует и многому учит."

}

Определения полей

<field name="price" type="float" default="0.0" indexed="true" stored="true"/>

  • name - имя поля. Должно состоять из английских букв, цифр и подчеркиваний и начинаться с буквы. Обязательный параметр.

  • type - тип поля - имя одного из объявленных типов (fieldType). Обязательный параметр.

  • default - значение по умолчанию, которое будет добавлено к любому документу, который не будет содержать значения в этом поле при индексации.

  • indexed (boolean) - может ли поле участвовать в запросах.

  • stored (boolean) - можно ли извлекать поле с помощью запросов.

Основные параметры

  • multiValued (boolean) - может ли поле в документе иметь несколько значений.

  • required (boolean) - обязательно ли наличие этого поля в документе.
  • omitNorms (boolean) - выключает хранение информации о длине поля, экономя память (истина для всех примитивных типов).

  • termVectors (boolean) - позволяет считать ключевые статистики для термов.

  • termPositions, termOffsets (boolean) - позволяет хранить позиции и сдвиги термов.

  • docValues (boolean) - переопределяет индекс для конкретного поля в doc-to-value стиле.

Основные параметры

<uniqueKey>id</uniqueKey>

Unique key

Необязательный элемент, устанавливает обязательное поле в документе с уникальным значением.

<schema>
    <types>
    <fields>
    <uniqueKey>
    <!-- similarity, copyfields, dynamic field and deprecated options -->
</schema>

Собираем воедино

Определения типов полей

<fieldType name="text_general" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

Представление об индексации

Analyzers, Tokenizers, and Filters

<fieldType name="nametext" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

Components overview

  • SearchComponents

  • SpellCheckComponent

  • QueryElevationComponent

  • TermVectorComponent

  • StatsComponent

  • ClusteringComponent

  • TermsComponent

  • BloomIndexComponent

TermVectorComponent

<searchComponent name="tvComponent" class="org.apache.solr.handler.component.TermVectorComponent"/>

 

<requestHandler name="tvrh" class="org.apache.solr.handler.component.SearchHandler">
        <lst name="defaults">
                <bool name="tv">true</bool>
        </lst>
        <arr name="last-components">
                <str>tvComponent</str>
        </arr>
</requestHandler>

TermVectorComponent

<field name="includes"

    type="text"

    indexed="true"

    stored="true"

    multiValued="true"

    termVectors="true"

    termPositions="true"

    termOffsets="true" />

TermVectorComponent

  • tv.tf (boolean) - возвращает частоту терма по документу.
  • tv.df (boolean)  - возвращает количество документов, где встречался данный терм. Дорогая операция.
  • tv.positions (boolean) - возвращает информацию о позиции термов.
  • tv.offsets (boolean) - возвращает информацию о смещении термов.
  • tv.tf_idf (boolean) - Считает tf*idf для каждого терма. Параметры tv.tf, tv.df должны быть истинны. Дорогая операция.
  • tv.all (boolean) - вывести всю дополнительную информацию, включая tv.tf, tv.df, etc.
  • tv.fl (String [, String]*) - Указывает, для каких полей возвращать информацию (по умолчанию fl)

Information Retrieval Practice 2

By stdfx

Information Retrieval Practice 2

  • 643