Так что я использую sunspot в проекте rails, и я индексирую названия песен. То, что я хочу сделать, это, когда я выполняю поиск определенного термина (например, «потеряю себя»), в верхней части списка результатов, чтобы появиться записи, содержащие точное совпадение для запроса (с пробелами и все).Sunspot SOLR KeywordTokenizer - поиск не вернет правильные результаты
Чтобы сделать это, я решил определить в schema.xml
используя KeywordTokenizerFactory
как эти новый fieldType
(я планировал использовать его наряду с обычным текстовым полем с StandardTokenizer
, использовать оба эти и повысить результаты, которые вышли с помощью KeywordTokenized
поле):
<fieldType name="text_exact" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
</fieldType>
и добавление динамического поля, как это (не уверен, что это должно быть многозначной для этой цели, может быть, кто-то может просветить меня на это тоже):
<dynamicField name="*_exact" stored="false" type="text_exact" multiValued="true" indexed="true"/>
Теперь в моем song.rb
файле у меня есть это в конфигурации searchable
:
text :song_name do
self.name
end
text :song_name_exact, as: :song_name_exact do
self.name
end
Проблема заключается в том, что, когда я пытаюсь искать с помощью song_name_exact
поля я получаю не результатов, если мой запрос содержит пробелы (так что если У меня есть песня под названием foo
, и я ищу foo
, она найдет ее, но если у меня есть один вызываемый foo bar
и поиск foo bar
, поисковый запрос не даст никаких результатов.
Итак, прежде всего, я хотел бы спросить, подходит ли мой подход к этому, и почему не поиск по полю с ключевым словом tokenizer работает правильно?
Что у наш поисковый запрос используется так: вам нужен аналогичный анализатор, который будет использоваться для этого слишком. –
Если вы спрашиваете, использую ли я тот же анализатор для запросов и индексирования, ответ да (если вы посмотрите на конфигурацию типа поля, увидим, что я не разделял запрос и анализаторы индексов, поэтому они оба используют одни и те же вещи). –
Что делать, если вы «обертываете» термин в кавычках перед поиском, но используя обычное текстовое поле? Если вам также нужны неточные совпадения, вы можете выполнить 2 поиска ... – brutuscat