当前位置: 首页 > 面试题库 >

Rails 5:如何在Elastic Search中导入数据并执行条件搜索?

戎劲
2023-03-14
问题内容

我有一个名为 Product模型。我提供了全文搜索来搜索产品并使用AngularJS在客户端进行预输入。搜索查询是一个普通的类似查询,例如:

select * from products where name like = %abc% and company_id = 123;

但是,随着表中记录的增加,使用上述方法的搜索时间增加了,因此我决定实现elasticsearch。我正在用两颗宝石'elasticsearch-model'and gem 'elasticsearch-rails'。如何索引 产品模型
。我尝试Product._elasticsearch_.create_index!rails控制台中 使用此命令,它给出了以下错误:

2.4.0 :006 > Product._elasticsearch_.create_index!
ArgumentError: products does not exist to be imported into. Use create_index! or the :force option to create it.

以下是我的实现:

产品型号

require 'elasticsearch/model'
class Product < ApplicationRecord
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks
  belongs_to :company
  belongs_to :category
  belongs_to :gst
  belongs_to :user
  has_many :invoice_details
  self.per_page = 100

  Product.import
end

问题答案:

您得到的错误是因为您没有products创建索引,因此您可以在此处看到产生错误的gem代码。

仔细看一下该行,!self.index_exists? index: target_index它会检查索引是否存在,如果不存在,则会引发错误。

因此,您在此处有两个选择,可以像这样强制导入:Product.import(force: true),请注意,这会破坏索引(如果存在)并再次创建它。

另一个选择是先创建索引,然后执行导入:

Product.__elasticsearch__.create_index!
Product.import

我建议您阅读如何在Elasticsearch中将模型映射到索引。Link1,Link2。因为要查询,您需要了解如何创建索引。



 类似资料:
  • 我正在使用Nest连接到ElasticSearch并执行一些查询。到目前为止,在给定一个通配符查询的情况下,我能够得到我想要的结果,如下所示: 但是现在我需要为某个用例的查询添加附加条件。 我需要的不仅是通过查询,还需要其他两个匹配的字段: 搜索术语"*" field 1="一些字符串" field="一些指南" 我确信在弹性搜索中一定有办法做到这一点(使用Nest),但我还没有找到它。 我知道我

  • 问题内容: 通常,每当我为SQL编写搜索查询时,我都会执行以下操作: 基本上,这模拟了条件WHERE子句。如果提供了@searchParam,我们只想将@searchParam与该列进行比较。 有没有办法使用Sequelize复制此内容? 编辑: 这是我的最佳尝试,但失败了: 更新: 我找到了一种方法,但是感觉像是一种解决方法。我敢肯定,必须有一种更优雅的方式。这可行,但是很丑陋: 问题答案: 您

  • ES版本 7.17.3 当我使用这样的DSL时,我无法搜到 阅读通知:DF33760BF_X4这样的数据 但我使用df337这种语句就可以搜到 我用profile发现term和multi_match并没有特别的先后关系,导致multi_match查询的前50个term没有命中到DF33760BF_X4这种数据 有没有什么办法能先满足term条件,在term条件满足的数据上在进行multi_matc

  • 问题内容: 我们有一个现有的搜索功能,该功能涉及SQL Server中多个表之间的数据。这给我们的数据库造成了沉重的负担,因此我试图寻找一种更好的方式来搜索这些数据(它不会经常更改)。我与Logstash和Elasticsearch一起工作了大约一个星期,使用包含120万条记录的导入。我的问题本质上是“如何使用“主键”更新现有文档”? CSV数据文件(以竖线分隔)如下所示: 我的logstash配

  • 本文向大家介绍PHP执行SQL文件并将SQL文件导入到数据库,包括了PHP执行SQL文件并将SQL文件导入到数据库的使用技巧和注意事项,需要的朋友参考一下 上面text.sql是你需要执行的sql文件,DB_HOST主机名,DB_USER用户名,DB_PASS密码! 这只是最基本的自动执行sql文件,你还可以自定义生成数据库的名称,方法就是将sql文件中下面的代码删去 USE 数据库名 然后在te

  • 问题内容: 我想编写一个与此SQL查询等效的Django查询: 如何构造Django queryset过滤器? 这是行不通的,因为它是过滤器。我想要过滤器以获取单个查询集的并集。 问题答案: 通过文档