Meine Suche funktioniert gut. Aber ich muss "1" oder "2" eingeben, um Ergebnisse von "Mitbewohner" oder "Untermiete" zu erhalten. Modell hat eine Spalte namens category_id
, die eine ganze Zahl ist. Modell Category
hat Spalte :name
, die eine Zeichenfolge ist.Wie kann ich category.name mithilfe von elasticsearch in Rails suchen?
So habe ich category_id 1 mit „Mitbewohner“ und 2 „untervermietet“
unten ist mein Gehäuse Modell:
class Housing < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
belongs_to :user
belongs_to :category
validates :title, :presence => true
validates :category_id, :presence => true
validates :created_at, :presence => false
validates :user_email, :presence => true
validates :description, :presence => false
validates_length_of :title, :maximum => 30
def self.search(query)
__elasticsearch__.search(
{
query: {
# multi_match: {
simple_query_string: {
query: query,
fields: ['title^10', 'category_id']
}
}
}
)
end
end
Wie kann ich das beheben fields: ['title^10', 'category_id']
So können Benutzer „Mitbewohner“ suchen anstatt muss integer "1" suchen, um das Ergebnis des Mitbewohners zu erhalten?
Ich versuchte fields: ['title^10', 'category.name']
, aber nicht funktioniert.
Dies funktioniert nicht .. –
'Kategorie has_many: housings' und' Gehäuse belongs_to: Category' ist was ich habe Beziehung. Soll ich es ändern? –
Wo definieren Sie diese Zuordnung? Wenn Sie es in einem Wohnungsmodell definieren, das eine Assoziation "gehört zu: Kategorie" hat, dann sollte es gut funktionieren. Sie müssen jedoch alle Attribute indizieren, nach denen Sie suchen müssen. Hier habe ich nur 'category.name' und' title' indiziert. Denken Sie daran, dass Sie Ihre Indizes zuerst neu erstellen müssen, da Elasticsearch Ihre Dokumente bereits in einem anderen Format indiziert hat. –