Solr / Dismax с динамическими полями - PullRequest
0 голосов
/ 21 января 2012

Я только добавил несколько динамических полей с подстановочными знаками в мою схему solr:

<dynamicField name="*_s" type="string" indexed="true" stored="true"/>

Затем я добавляю документ с именем поля, например asdfasdf_s

Если я выполню запрос, который вызывает этот документ, я вижу, что asdfasdf_s сохраняется в результатах с заданным мною значением.

Однако, если я ищу по значению в этом динамическом поле, я не получаю результатов. Я использую анализатор запросов dismax.

1 Ответ

0 голосов
/ 21 января 2012

Это наиболее вероятно, потому что у вас тип поля типа ваших динамических полей установлен на string. По умолчанию тип строкового поля, как показано ниже, не слишком удобен для поиска, так как с ним не связан ни один индекс или анализатор времени запроса.

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

Я бы посоветовал вам изменить тип поля на text_general, как показано ниже.

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

Поскольку text_general лучше подходит для запросов к полю, так как он токенизирует, строчные буквы и предоставляет синонимы для значений, добавленных к нему. Одним из быстрых способов получить те же преимущества без изменения типа вашего поля для динамики было бы использование copyField для копирования ваших динамических значений в тип поля text_general или другой тип поля, который лучше было бы запрашивать. против.

...