#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>