标签: searchkick

文本字段未针对需要每个文档字段数据的操作进行优化

从 Elasticsearch 切换到 Opensearch 后,我的应用程序现在无法使用以下命令运行简单查询:

“文本字段没有针对需要每个文档字段数据的操作(例如聚合和排序)进行优化,因此默认情况下禁用这些操作。请改用关键字字段。或者,在 [status] 上设置 fielddata=true 以便加载字段通过反转倒排索引来恢复数据。请注意,这可能会使用大量内存。”

在Searchkick / Elasticsearch Error: Please use a keywords field 相反,有一个关于相同错误的问题。或者,在 [name] 上设置 fielddata=true,但问题仅影响测试,并且我仅在开发模式下遇到问题(到目前为止)。

这是正在运行的查询:

::Record.search(q ? q : "*",
                where: where_clause,
                fields: fields,
                match: :word_middle,
                per_page: max_per_page(per_page) || 30,
                page: page || 1,
                order: sort_clause,
                aggs: aggs,
                misspellings: {below: 5}
Run Code Online (Sandbox Code Playgroud)

如果我取出 aggs,那么搜索就可以了,但它们对于应用程序来说是必不可少的。:status从聚合字段列表中删除会导致错误将数组中的下一个字段命名为问题。因此,我可能需要为聚合中使用的每个字段指定正确的类型。但如何呢?

Searchkick 文档在“高级映射”( https://github.com/ankane/searchkick ) 下建议使用此示例:

class Product < ApplicationRecord
  searchkick mappings: {
    properties: {
      name: {type: "keyword"}
    }
  }
end
Run Code Online (Sandbox Code Playgroud)

所以,我尝试了这个:

# in …
Run Code Online (Sandbox Code Playgroud)

opensearch elasticsearch searchkick

19
推荐指数
2
解决办法
4万
查看次数

Elasticsearch::UnsupportedProductError(客户端注意到服务器不是 Elasticsearch 支持的发行版

在 Mac 上将 searchkick 与 elasticsearch 结合使用时出现此错误。

Searchkick 版本:searchkick (4.5.2)

$ elasticsearch --version
warning: no-jdk distributions that do not bundle a JDK are deprecated and will be removed in a future release
Version: 7.10.2-SNAPSHOT, Build: oss/tar/unknown/2021-01-16T01:41:27.115673Z, JVM: 16.0.2
Run Code Online (Sandbox Code Playgroud)

重现

产品重建索引

ruby-on-rails elasticsearch searchkick

17
推荐指数
2
解决办法
3万
查看次数

searchkick索引相关的模型字段

我有一个rails应用程序,我正在从Sphinx切换到ElasticSearch并使用gem searchkick.

我有一个模型教师和模型标签(通过宝石),教师可以有多个标签关联.在Teacher模型中,我已经定义了这样的索引:

def search_data
    {
      name: name,
      intro: intro,
      bio: bio,
      tag_name: tags.name
    }
end
Run Code Online (Sandbox Code Playgroud)

Name,intro和bio是教师属性,但我想索引与教师关联的标签的名称.我怎样才能做到这一点?

它现在的方式,它索引对象的名称(关系),我如何索引标签对象内的属性名称?

orm ruby-on-rails ruby-on-rails-3 elasticsearch searchkick

9
推荐指数
1
解决办法
4838
查看次数

Searchkick手动删除特定记录索引

如何使用Searchkick手动删除特定记录索引.有重新索引特定记录的选项,但我没有找到删除记录索引的任何选项.

 product = Product.find 10
 product.reindex
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails elasticsearch ruby-on-rails-4 searchkick

9
推荐指数
4
解决办法
3616
查看次数

Rails4生成elasticsearch错误 - 找不到geo_point,但在开发中工作

我有一个很好的运行Rails 4应用程序使用弹性搜索和searchkick.I有geosearch通过设置geo_point它在开发中工作得很好,但在部署相同的代码并验证生产中的索引后,在数字海洋上使用3GB RAM和Ubuntu -16操作系统,它失败了 -

A Searchkick::InvalidQueryError occurred in home#show_by_location_and_event:

      [400] {"error":{"root_cause":[{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":724}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"halls_production_20180520121711247","node":"Mn7tHSKLQWSB1N8Sypb6Qg","reason":{"type":"query_parsing_exception","reason":"failed to find geo_point field [location]","index":"halls_production_20180520121711247","line":1,"col":724}}]},"status":400}
      app/controllers/home_controller.rb:168:in `show_by_location_and_event'
Run Code Online (Sandbox Code Playgroud)

home_controller.rb

  lat_lng = Geocoder.coordinates(@location)
  @event_name = params[:event_name]
  ###XXXX FAILING HERE AT BELOW LINE
  @halls =  Hall.get_completed_halls_only.search @location ,
              where: { 
                location: {  near: lat_lng,within: "20km"} ,
                workflow_state: "accepted",
                active: "true"                        
              }
Run Code Online (Sandbox Code Playgroud)

车型/ hall.rb

##added geo_point
##hall has one address association
searchkick word_start: [:name, :slug, :description, :facebook_link],
             word_middle: [:name, :slug, :description, :facebook_link],
             text_start: [:name, :slug] …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails elasticsearch ruby-on-rails-4 searchkick

9
推荐指数
1
解决办法
219
查看次数

从模型重建索引后,Searchkick索引为空

当我尝试从模型内部重新索引记录时,它最终会在elasticsearch服务器上设置一个空索引.

所以,我有一个Course有很多的模型Instructors.现在,我在instructor.rb模型中有这个回调方法,它会在更新某些内容时尝试重新索引Instructor.

class Instructor < ActiveRecord::Base
belongs_to :teacher, :class_name => "User", :foreign_key => "user_id"
belongs_to :instructorable, polymorphic: true
after_commit :reindex_course

private

  def reindex_course
     Course.reindex_course
  end
end
Run Code Online (Sandbox Code Playgroud)

course.rb 模型看起来像这样:

    class Course < ActiveRecord::Base
        has_many :instructors, as: :instructorable, dependent: :destroy

searchkick word_start: [ :name, :description, :instructor_name]

def search_data
      {
      name: name,
      description: description,
      searchable: searchable,
      }.merge(
        instructor_name: instructors.includes(:teacher).pluck(:'users.name').reject(&:nil?),
      institute_id: creator.try(:institute_id)
)
            def self.reindex_course
                index = Course.reindex(async: true, refresh_interval: "5s")
                Course.search_index.promote(index[:index_name], update_refresh_interval: true)
                Course.search_index.clean_indices
              end …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails elasticsearch searchkick

8
推荐指数
1
解决办法
913
查看次数

FORBIDDEN/12/index 只读/允许删除(api)问题

将项目导入我的 Rails 应用程序时,我不断收到 SearchKick 代表 Elasticsearch 引发的上述错误。

我在 Docker 中运行 Elasticsearch。我通过运行 docker-compose up 来启动我的应用程序。我试过运行上面推荐的命令,但我只是得到“没有这样的文件或目录”返回。有任何想法吗?

我确实有端口 9200 暴露在外面,但似乎没有任何帮助。有任何想法吗?

ruby-on-rails elasticsearch searchkick

8
推荐指数
2
解决办法
9509
查看次数

Searchkick结果无关紧要

我有相关搜索的问题.以下请求的结果非常奇怪:

Candidate.search('martin', fields: [:first_name, :last_name], 
                           match: :word_start, misspellings: false).map(&:name)


["Kautzer Martina",
 "Funk Martin",
 "Jaskolski Martin",
 "Gutmann Martine",
 "Wiegand Martina",
 "Schueller Martin",
 "Dooley Martin",
 "Stiedemann Martine",
 "Bartell Martina",
 "Gerlach Martine",
 "Green Martina",
 "Lang Martine",
 "Legros Martine",
 "Ernser Martina",
 "Boehm Martina",
 "Green Martine",
 "Nolan Martin",
 "Schmidt Martin",
 "Hoppe Martin",
 "Macejkovic Martine",
 "Emard Martine"]
Run Code Online (Sandbox Code Playgroud)

为什么玛蒂娜要早于马丁?

Searckick配置:

searchkick language: %w(German English), word_start: [:first_name, :last_name]
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails elasticsearch searchkick

7
推荐指数
1
解决办法
303
查看次数

Elasticsearch问题:无法连接AWS elasticsearch服务

我有一个关于配置elasticsearch以连接AWS elasticsearch服务以在生产中运行项目的问题.我的Gemfile:

    gem 'searchkick'
    gem 'faraday_middleware-aws-signers-v4'
    gem 'aws-sdk', '~> 2'
    gem "elasticsearch", ">= 1.0.15"
Run Code Online (Sandbox Code Playgroud)

参考:https://github.com/ankane/searchkick

我的config/initializers/elasticsearch.rb文件:

    require "faraday_middleware/aws_signers_v4"
    ENV["ELASTICSEARCH_URL"] = "https://search-eaterybot-u3yjm6cdn3ogkmv3bcdl5j7poy.ap-southeast-1.es.amazonaws.com/"

       Searchkick.client = Elasticsearch::Client.new(
       url: ENV["ELASTICSEARCH_URL"],
        transport_options: {request: {timeout: 10}}
       ) do |f|
       f.request :aws_signers_v4, {credentials: Aws::Credentials.new(Rails.application.secrets.aws_access_key_id, Rails.application.secrets.aws_secret_access_key),
       service_name: "es",
       region: "ap-southeast-1"
     }
   end
Run Code Online (Sandbox Code Playgroud)

当我运行"rake searchkick:reindex:all"时,它显示错误:

Elasticsearch :: Transport :: Transport :: Errors :: Forbidden:[403] {"message":"我们计算的请求签名与您提供的签名不匹配.请检查您的AWS Secret Access Key和签名方法.请参阅服务文档有关详细信息.\n \n此请求的规范字符串应该是\n'GET \n/_aliases \n \naccept-encoding:gzip; q = 1.0,deflate; q = 0.6,identity; q = 0.3 \nhost: search-eaterybot-u3yjm6cdn3ogkmv3bcdl5j7poy.ap-southeast-1.es.amazonaws.com\NX-AMZ-内容-SHA256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\NX-AMZ-日期:20160914T095023Z \n \naccept编码;主机; X-AMZ-内容 …

ruby ruby-on-rails amazon-web-services elasticsearch searchkick

6
推荐指数
1
解决办法
888
查看次数

使用带有Rails4的Searchkick导入记录时如何强制加载关联?

对于默认(未指定)的此设置search_data:

class Item < ActiveRecord::Base
 searchkick
 has_many :quantities, dependent: :destroy
 scope :search_import, -> { includes(:quantities) }

end
Run Code Online (Sandbox Code Playgroud)

通过运行导入所有数据库记录时Item.reindex,每个"批处理"急切按预期加载所有项目ID的数量.

但是,如果我想使用search_data包含相关模型数据的方法指定索引模型文档的方式与默认属性不同,如下所示:

class Item < ActiveRecord::Base
 searchkick
 has_many :quantities, dependent: :destroy

 def search_data
   {
     part_number: standard_part_number,
     category_id: category_id.to_i,
     content_source_name: content_source_name,
     standard_price: standard_price.to_i,
     locations: quantities.map {|q| [q.location_code,
       quantity: q.value.to_i,
       bins: q.location_bins]
     }.to_h
   }
 end

 scope :search_import, -> { includes(:quantities) }

end
Run Code Online (Sandbox Code Playgroud)

我在quantities使用map来定义一个locations属性的操作,返回导入使用Item.reindex我看到它不仅渴望加载所有相关的quantities每个批次,但它也会再次加载所有quantities每次item点击数据库为每个item记录它是索引. …

ruby-on-rails searchkick

6
推荐指数
1
解决办法
110
查看次数