gpt4 book ai didi

ruby - 如何在ruby gem SearchKick中将字段添加到ElasticSearch以便按顺序排序

转载 作者:行者123 更新时间:2023-12-03 02:34:43 25 4
gpt4 key购买 nike

我有一个项目,在这里我使用Searchkick gem以便首先从ElasticSearch中获取记录,然后对其进行进一步处理。最初实现它的家伙在SearchKick的基本选项中按两个字段添加了一个排序选项:

def base options
{
fields: %i[catalogue_number oe_numbers],
match: :word_start,
misspellings: false,
where: @conditions,
load: false,
order: { sale_rotation_group: { order: :desc } }, { lauber_id_integer: { order: :desc } },
highlight: @params[:highlight]
}
end
lauber_it_integer在应用程序数据库中不存在,因此它必须是他们添加的ElasticSearch中的一个字段。

现在,我想更改它,而不是当前顺序,我想告诉SearchKick告诉ElasticSearch通过添加到应用程序数据库中的字段 images_countparameters_count来对记录进行排序。所以可能我需要将这些新字段添加到ElasticSearch中,以便它知道如何对记录进行排序。我将订单选项更改为
order: { images_count: { order: :desc } }

但是现在我得到了错误:
Searchkick::InvalidQueryError ([400] {"error":{"root_cause":[{"type":"query_shard_exception","reason":"No mapping found for [images_count] in order to sort on","index_uuid":"WhC4XK8IRnmmfkPJMNmV1g","index":"parts_development_20191124205133405"}]

这可能还会涉及ElasticSearch上的一些额外工作,以将数据添加到这些新字段中,但是我对ElasticSearch知之甚少。您能给我一些有关如何解决问题的指示或提示吗?

最佳答案

您需要将 Elasticsearch 索引添加到要可排序/可搜索的每个新字段。

Here是从头开始进行设置的不错的指南,它解释了所有基本概念,elasticsearch具有自己的模式,因此您需要获取它以匹配新的模式。

他们给出的示例是:

class Post < ApplicationRecord
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks

settings do
mappings dynamic: false do
indexes :author, type: :text
indexes :title, type: :text, analyzer: :english
indexes :body, type: :text, analyzer: :english
indexes :tags, type: :text, analyzer: :english
indexes :published, type: :boolean
end
end
end

您将在所搜索的任何模型上看到类似的部分。

只需将要索引的字段添加到模型文件中,然后从控制台调用中添加(用模型名替换 Post):
Post.__elasticsearch__.delete_index!
Post.import force: true

关于ruby - 如何在ruby gem SearchKick中将字段添加到ElasticSearch以便按顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com