Rails モデル内の Elasticsearch に次のインデックスがあります。
mapping do
indexes :id, type: "integer", index: :not_analyzed, include_in_all: false
indexes :number, type: "string"
indexes :title, type: "string"
indexes :description, type: "string"
indexes :creation_date, type: "date", index: :not_analyzed, include_in_all: false
indexes :photographer, type: "integer", index: :not_analyzed, include_in_all: false
indexes :photographer_name, type: "string", as: Proc.new { photographer.name if photographer }
indexes :original_type, type: "integer", index: :not_analyzed, include_in_all: false
indexes :original_type_description, type: "string", as: Proc.new { original_type.description if original_type }
indexes :format_type, type: "integer", index: :not_analyzed, include_in_all: false
indexes :format_type_description, type: "string", as: Proc.new { format_type.description if format_type }
indexes :country, type: "integer", index: :not_analyzed, include_in_all: false
indexes :country_name, type: "string", as: Proc.new { country.name if country }
indexes :state, type: "integer", index: :not_analyzed, include_in_all: false
indexes :state_name, type: "string", as: Proc.new { state.name if state }
indexes :state_region, type: "string", as: Proc.new { state.region if state }
indexes :locality, type: "string"
indexes :license_type, type: "integer", index: :not_analyzed, include_in_all: false
indexes :license_type_description, type: "string", as: Proc.new { license_type.description if license_type }
indexes :model_release_type, type: "integer", index: :not_analyzed, include_in_all: false
indexes :model_release_type_description, type: "string", as: Proc.new { model_release_type.description if model_release_type }
indexes :property_release_type, type: "integer", index: :not_analyzed, include_in_all: false
indexes :property_release_type_description, type: "string", as: Proc.new { property_release_type.description if property_release_type }
indexes :keywords, type: "string", as: Proc.new { keywords.map(&:value) }
end
フィールドを実装する必要がありautocomplete
、ここを含む多くの資料を見つけてElasticsearch
、タイヤを使用してこれを行う方法を教えています。ただし、それらはすべて、インデックス内の 1 つのフィールドのみに基づく提案を示しています。
autocomplete
タイトル、写真家、キーワードなど、いくつかのフィールドで見つかった用語をフィールドに提案する必要があります。さらに、フィールドのキーワードは配列です。つまり、複数の単語が含まれています。