Solr: использование подстановочного знака в строке с пробелами

У меня в основном та же проблема, что и здесь: Solr подстановочный запрос с пробелами, но на этот вопрос не было ответа.

Я использую подстановочный знак в запросе фильтра в поле под названием "бренд".

У меня проблемы, когда в названии бренда есть пробелы. Например, фильтрация бренда "Lexington" работает нормально, когда я говорю fq={! Tag=brand}brand:Lexing*n. Однако, многословный бренд, такой как "Athentic Models", вызывает проблемы. Кажется, двойные кавычки должны быть включены вокруг имени.

Когда есть "s, *s ничего не делают, то есть бренд:"Athentic Mode*"или бренд:"Lexingt*", ничего не будет соответствовать. Без двойных кавычек это действительно работает, чтобы сказать бренд:Authen*, без кавычек и без пробела, и это будет соответствовать Аутентичным моделям. Но как только пробел включается в название бренда, кажется, что при сопоставлении строка учитывается только до первого пробела.

Поле бренда имеет тип

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

который не является пробелом, насколько я понимаю. Однако он заполняется copyField из поля с пробелами.

Что я могу сделать, чтобы остановить Solr от токенизации запроса фильтра без использования двойных кавычек?

3 ответа

Решение

Как сказал Роб в своем ответе, я сам опубликовал ответ на вопрос, с которым он связан.

Все, что вам нужно сделать, это избежать пробела в вашем запросе (как в customer_name:Pop *Tart -> customer_name:Pop\ *Tart). По моему опыту, этот метод работает независимо от того, где вы размещаете подстановочный знак, который подтверждается тем, как Solr утверждает, что-то вроде:

customer_name:Pop\ *Tart

Разбирается как:

customer_name:Pop *Tart

Попробуйте изменить тип с строки на что-то вроде текста. Строковый тип не маркируется, поэтому, когда в строковом поле есть пробел, он будет пытаться соответствовать вашему запросу, включая пробелы в поле.

в файле схемы по умолчанию вы можете увидеть эту строку чуть выше строкового типа поля

<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->

Использование типа текста должно решить вашу проблему, например, text_general или подобный.

Я добавил возможное решение в исходном вопросе Solr подстановочный запрос с пробелами

Обратите внимание, это работает ТОЛЬКО с конечными подстановочными знаками. Я знаю, что этот пример вопроса использует подстановочный знак в строке, но он служит для ответа на конкретный случай рассматриваемого вопроса.

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

Другие вопросы по тегам