Использование asticsearch для фильтрации по тегам с пробелами
Я использую шину (https://github.com/karmi/tire) с mongoid. Вот мое определение модели:
class SomethingWithTag
include Mongoid::Document
include Mongoid::Timestamps
field :tags_array, type: Array
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :tags_array, type: :array, index: :not_analyzed
end
end
Скажем, у меня есть документ {tags_array: ["hello world"]}. Тогда следующие запросы работают нормально:
SomethingWithTag.tire.search { filter :terms, :tags_array => ["hello"] }
SomethingWithTag.tire.search { filter :terms, :tags_array => ["world"] }
SomethingWithTag.tire.search { filter :terms, :tags_array => ["hello", "world"] }
Но следующее не возвращает никаких результатов:
SomethingWithTag.tire.search { filter :terms, :tags_array => ["hello world"] }
Что я должен сделать, чтобы это работало?
Изменить: вот небольшой кусок кода для тестирования: http://pastebin.com/n1rUtK3e
1 ответ
Проблема решена в:
Использовать keyword
анализатор для tags_array
имущество:
class SomethingWithTag
# ...
mapping do
indexes :tags_array, analyzer: 'keyword'
end
end