Мы используем Searchkick 4.3.1 с ElasticSearch 7.4.x и заметили, что все модели теперь индексируются с типом _doc
. Это несмотря на то, что Searchkick, похоже, все еще правильно генерирует :_type
для индекса.
Дано:
class Announcement < ApplicationRecord
searchkick
end
У нас есть следующий результат:
Announcement.searchkick_index.options[:_type].call
=> "announcement"
Но когда мы получаем результаты поиска, хиты возвращаются с type: "_doc"
:
Announcement.searchkick('test').hits
=> [{"_index"=>"announcements_development_20200527141317316", "_type"=>"_doc", "_id"=>"108111", "_score"=>52.14424},
{"_index"=>"announcements_development_20200527141317316", "_type"=>"_doc", "_id"=>"90441", "_score"=>47.764935},
{"_index"=>"announcements_development_20200527141317316", "_type"=>"_doc", "_id"=>"63721", "_score"=>47.682816},
{"_index"=>"announcements_development_20200527141317316", "_type"=>"_doc", "_id"=>"102031", "_score"=>47.682816},
{"_index"=>"announcements_development_20200527141317316", "_type"=>"_doc", "_id"=>"19071", "_score"=>46.733723}]
Где это действительно проявляется как проблема, так это когда мы выполняем поиск по нескольким моделям. В частности, потому что эти поиски по нескольким моделям будут иметь разные условия where
для каждой модели, и мы будем ограничивать эти условия следующим образом: where({ _or: [{type: '_announcement', active: true}, {type: '_event', upcoming: true} ])
Теперь, когда type
всегда '_doc'
, эти наборы результатов всегда пусты. . Я также пробовал явно использовать имя _index
в where
, но Searchkick возвращает псевдоним индекса для следующего:
Announcement.searchkick_index.name
=> "announcements_development"
Это проблема с Searchkick? Потому что кажется, что должен правильно устанавливать _type
в индексе. В следующей статье (https://www.elastic.co/blog/removal-of-mapping-types-elasticsearch#mapping -тип ) в примечаниях к удалению Elasticsearch 7.x говорится:
7.x индексы, которые не имеют явного типа, будут использовать имя фиктивного типа _do c.
но должно ли это применяться здесь? Похоже, Searchkick все равно установит тип.
Любая помощь будет принята с благодарностью. Возможно, есть другой способ привязать условия where
к определенному индексу c при выполнении поиска по нескольким моделям?