Начинается с solr и пробелов

#solr

#солр

Вопрос:

Как мне запросить поле , начинающееся с определенного предложения ? Например, я хочу найти: «Оливер Хард *».

Я ожидаю точного одного матча за «Оливера Харди». У меня есть только одна запись, которая начинается с «Оливер Харди».

после этого я попробовал, но это не сработало:

"q":actorsName:Oliver Hard* -> приносит мне все Оливки и немного нечеткой логики

"q":actorsName:"Oliver Hard* » -> то же самое

Как выполнить запрос с помощью StartsWith и пробелов в Solr ?

Комментарии:

1. Какой тип поля actorsName ? Любое совпадение должно происходить на уровне токена, поэтому, если поле проанализировано и помечено, оно обычно будет разделено на отдельные токены (и ваш запрос означает actorsName:Oliver <default search field>:Hard* ). Чтобы решить эту проблему, проиндексируйте содержимое в string поле, которое хранит все в виде одного токена, а затем используйте actorName:Oliver Hard* для запроса к нему. Проверьте, работает ли это (и если вам нужно, чтобы поле было помечено, проиндексируйте содержимое в двух полях с помощью copyField ).

Ответ №1:

Вы должны использовать строку в качестве типа поля для вашего поля.

Строка как тип поля не будет обозначать слово и сохранится как есть, что поможет вам добиться точного соответствия.

Строка хранит слово / предложение как точную строку без выполнения токенизации и т.д. Обычно используется для хранения точных совпадений, например, для фасетирования. Текст обычно выполняет маркировку и вторичную обработку (например, нижний регистр и т.д.)

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

 <fieldType name="forExactMatch" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <!-- KeywordTokenizer does no actual tokenizing, so the entire
             input string is preserved as a single token
          -->
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <!-- The LowerCase TokenFilter does what you expect, which can be
             when you want your sorting to be case insensitive
          -->
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>