Оценка для документов Solr изменяется, когда для поля установлено значение «сохранен = ложь» - PullRequest
0 голосов
/ 18 января 2019

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

В моем schema.xml я использую динамические поля следующим образом (версия Solr - 7.5):

<dynamicField name="*_fct_c" type="text_default" omitNorms="false"/>

Тип "text_default" определяется как:

<fieldType name="text_default" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true" multiValued="false" omitNorms="true">
        <analyzer type="index">
            <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\p{Punct}&amp;&amp;[^\-_]]" replacement=" "/>
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.WordDelimiterGraphFilterFactory"
                    generateWordParts="1" generateNumberParts="1" catenateWords="0"
                    catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
                    splitOnNumerics="0" preserveOriginal="1" />
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
        <analyzer type="query">
            <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\p{Punct}&amp;&amp;[^\-_\?\*]]" replacement=" "/>
            <tokenizer class="solr.WhitespaceTokenizerFactory" />
            <filter class="solr.WordDelimiterGraphFilterFactory"
                    generateWordParts="1" generateNumberParts="1" catenateWords="0"
                    catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
                    splitOnNumerics="0" preserveOriginal="1" />
            <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
    </fieldType>

Я изменил определение поля на:

<dynamicField name="*_fct_c" type="text_default" omitNorms="false" stored="false" />

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

Поле не содержится в возвращенном документе Solr, что я и ожидал (и предполагал).

Но я не понимаю измененных оценок, поскольку поле все еще индексируется (как это было раньше), и я не ожидал, что то, будет ли поле сохранено или нет, влияет на счет. Кроме того, официальная документация, похоже, не подразумевает ничего подобного.

Я что-то упустил?

1 Ответ

0 голосов
/ 23 января 2019

Я обнаружил, что мое приложение выполняет некоторые атомарные обновления при запуске. Помня об этом термине, я нашел следующую статью Solr Atomic Update - обновлять документы с полями, которые проиндексированы, но не сохранены (я думаю, что раньше не нашел его из-за опечатки в заголовке).

Этот ответ объясняет, почему сохраненное поле теряется. К сожалению, я не могу использовать docValues ​​= "true", так как я использую тип TextField, и мне придется искать другой обходной путь.

РЕДАКТИРОВАТЬ: Мы решили использовать DocTransformer в качестве обходного пути, чтобы рассматриваемое поле оставалось сохраненным, но могло быть удалено из документов Solr через преобразователь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...