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. Проверьте мой пост на исходный вопрос для получения более подробной информации, чтобы я не презирался за повторение.