2

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タイトル、写真家、キーワードなど、いくつかのフィールドで見つかった用語をフィールドに提案する必要があります。さらに、フィールドのキーワードは配列です。つまり、複数の単語が含まれています。

4

0 に答える 0