Elastic Search / Tire: Wie ordne ich ein Assoziationsattribut zu?
Ich benutzeReifen für die elastische Suche. In meiner Bewerbung habe ich 2 Modelle; Preis und Produkt.
Ich versuche, meine Preisklasse zu durchsuchen und das Produkt zu verwenden, zu dem es gehört:name
Attribut für das Suchfeld. Im Moment, wenn ich ein Produkt namens hatteProduct 1
Wenn Sie "pro", "prod" oder "duct" eingeben, werden keine Ergebnisse angezeigt. Wenn Sie jedoch "Produkt" oder "Produkt" eingeben, werden die Ergebnisse angezeigt. Ich glaube, das Problem liegt in meiner Zuordnung. Ich habe mir die Abfrage und deren:
...localhost:3000/search/results?utf8=%E2%9C%93&query=product
Wenn ich denke, sollte es sein:
...localhost:3000/search/results?utf8=%E2%9C%93&query:product=product
Nach dieser Frage zu urteilen:Die ElasticSearch-Zuordnung funktioniert nicht
Ich weiß nicht, wie ich meine machen sollparams[:query]
den ... nehmenproduct.name
nur wenn. Ich habe versucht zu benutzen:string params[:query], default_field: "product.name"
aber das hat nicht funktioniert.
Ich möchte das nicht benutzen_all
Feld.
Hier ist mein Code:
Preis.rb
include Tire::Model::Search
include Tire::Model::Callbacks
def self.search(params)
tire.search(load: true, page: params[:page], per_page: 20) do
query do
boolean do
must { string params[:query] } if params[:query].present?
must { term :private, false }
end
end
sort do
by :date, "desc"
by :amount, "asc"
end
end
end
def to_indexed_json
to_json( include: { product: { only: [:name] } } )
end
mapping do
indexes :id, type: "integer"
indexes :amount, type: "string", index: "not_analyzed"
indexes :date, type: "date", index: "not_analyzed"
indexes :private, type: "boolean"
indexes :product do
indexes :name, type: "string", analyzer: "custom_analyzer"
end
end
settings analysis: {
analyzer: {
custom_analyzer: {
tokenizer: [ "whitespace", "lowercase" ],
filter: [ "ngram_filter", "word_delimiter_filter" ],
type: "custom"
}
},
filter: {
ngram_filter: {
type: "nGram",
min_gram: 2,
max_gram: 15
}
},
filter: {
word_delimiter_filter: {
type: "word_delimiter",
generate_word_parts: true,
generate_number_parts: true,
preserve_original: true,
stem_english_possessive: true
}
}
}
Hat jemand Vorschläge oder weiß, wie man das Abfragefeld so einstellt, dass nur der Produktname verwendet wird?
Vielen Dank.