1

Использование Rails 4.2 с searchkick и elasticsearch, у нас есть некоторые, где условия созданы, чтобы найти пользователей:Searchkick Упругие Поиск где состояние как поведение

where_data = { 
    region: "North America" 
} 
results = Person.search(query, where: where_data) 

Это работает, как ожидалось, и находит человека, когда Person.region является «Северная Америка ».

Но есть и другие ситуации, когда у человека есть несколько регионов, включая Северную Америку: «Африка, Северная Америка». В этих случаях человек не найден.

Как я могу настроить, где данные или вызовы, чтобы он работал больше, как LIKE в sql, и найти любые соответствующие экземпляры полной строки?

+0

Можете ли вы вставить индексированные данные? Я думаю, вам нужно индексировать все регионы. – Dias

ответ

2

Для поиска лица, где область содержит "Северная Америка", первая попытка обновить:

Person.search "North America", fields: [:region] 

Если это не сработает, попробуйте добавить это к Person Model:

class Person < ActiveRecord::Base 
    searchkick word_middle: [:region] 

А потом (после переиндексации)

Person.search "North America", fields: [:region], match: :word_middle 

Если это все еще не работает, я бы предложил сделать :region коллекцию в ES (сообщите мне, если вы заинтересованы, я сделал это перед использованием searchkick, но не помню точный код. Я могу вытащить его и отправить для вас позже)

+0

Спасибо Джим, я попробовал добавить 'word_middle' для поиска, но это не сработало. Текст поиска 'query' уже установлен и теперь пытается фильтровать результаты на основе выбранной области. – tmartin314

0

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

option_string = array_of_options.join(" ") 

Использование синтаксиса JSON с камнями из эластичных рельсов, вы должны быть в состоянии достичь этого.

where_data = { 
    region: option_string 
} 
results = Person.search(query, where: where_data) 
+0

Привет, спасибо за информацию. Я просто пытаюсь отфильтровать одну строку. В столбце есть один или несколько параметров. – tmartin314

2

Вы можете передать вместо хэша массив. Таким образом, вы можете иметь:

where_data = [ 
    "region LIKE North America" 
] 
results = Person.search(query, where: where_data) 

Таким образом, когда положение будет использовать LIKE, чтобы посмотреть на ваши результаты.