Тип всегда _do c с Searchkick 4.3.1 и ES 7.4. - PullRequest
1 голос
/ 27 мая 2020

Мы используем 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 при выполнении поиска по нескольким моделям?

...