Как разрешить search возвращать элементы из запросов, которые являются частью word

#ruby-on-rails #ruby #ruby-on-rails-3 #search #full-text-search

#ruby-on-rails #ruby #ruby-on-rails-3 #Поиск #полнотекстовый поиск

Вопрос:

Я использую плагин acts_as_index для поиска, и я заметил, что, похоже, он возвращает только элементы, слова которых соответствуют точному запросу. Я хочу возвращать элементы, даже если запрос является только частью word. Как бы я настроил для этого?

Ответ №1:

acts_as_indexed поддерживает только частичные совпадения слов в начале word. Вот пример из документов:

Термины, начинающиеся с ^, будут соответствовать записям, которые содержат слово, начинающееся с термина. ’^cat’ найдет совпадения, содержащие ‘cat’, ‘catapult’, ‘caterpillar’ и т.д.

Этого и следовало ожидать от индексированного поиска. Поиск частичных совпадений в любом месте word сведет на нет преимущества использования индекса.

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

1. Для протокола, ваше последнее утверждение верно только для индексов, состоящих из полного слова. Индексирование перевернутой формы исходного слова («drow» для «word») приводит к «завершению» поиска аналогично перевернутых запросов, в то время как индексирование частичных форм («word», «ord», «rd») приводит к «contains». Построение индексов, подобных этому, улучшает размер индекса для гибкости запроса.

Ответ №2:

Для всех, кто ищет это, поскольку acts as indexed принимает методы в качестве полей, вы могли бы написать методы, которые возвращают все неполные слова для поля в виде строки