【问题标题】:Rails Elasticsearch, SearchkickRails Elasticsearch、Searchkick
【发布时间】:2023-03-07 19:09:02
【问题描述】:

我刚刚关注 this tutorial 将 elasticsearch 添加到我的应用程序中。

我在 Windows 8 系统上工作,并且安装了 elasticsearch。但是当我尝试在我的应用程序中搜索某些内容时,它什么也找不到。

在教程中他们说我可以使用 rails 控制台查看搜索是否正常。

我安装了 searchkick gem 并运行 bundle install。

我在 Ticket 类中添加了 searchkick。

class Ticket < ActiveRecord::Base
  searchkick
  # ...
end

我将 Ticket 类添加到索引中

rake searchkick:reindex CLASS=Book

当我尝试在 rails 控制台中搜索某些内容时,它什么也没找到。

irb(main):001:0> results = Ticket.search("computer")
  Ticket Search (103.0ms)
curl http://lvh.me:9200/tickets_development/_search?pretty -d '{
  "query": {
    "dis_max": {
      "queries": [
        {
          "match": {
            "_all": {
              "query": "computer",
              "operator": "and",
              "boost": 10,
              "analyzer": "searchkick_search"
            }
          }
        },
        {
          "match": {
            "_all": {
              "query": "computer",
              "operator": "and",
              "boost": 10,
              "analyzer": "searchkick_search2"
            }
          }
        },
        {
          "match": {
            "_all": {
              "query": "computer",
              "operator": "and",
              "boost": 1,
              "fuzziness": 1,
              "max_expansions": 3,
              "analyzer": "searchkick_search"
            }
          }
        },
        {
          "match": {
            "_all": {
              "query": "computer",
              "operator": "and",
              "boost": 1,
              "fuzziness": 1,
              "max_expansions": 3,
              "analyzer": "searchkick_search2"
            }
          }
        }
      ]
    }
  },
  "size": 100000,
  "from": 0,
  "fields": []
}'

=> #<Searchkick::Results:0x6ec5de8 ,
@klass=Ticket(
  id: integer, 
  name: string, 
  client: string, 
  archived: boolean, 
  created_at: datetime, 
  updated_at: datetime
)
@response={
  "took"=> 90,
  "timed_out"=> false,
  "_shards"=> {
    "total"=> 5,
    "successful"=> 5,
    "failed"=> 0
  },
  "hits"=> {
    "total"=> 0,
    "max_score"=> nil,
    "hits"=> []
  }
},
@options={
  :page=>1,
  :per_page=>100000, 
  :padding=>0, 
  :load=>true, 
  :includes=>nil, 
  :json=>false
} > irb(main):002:0> results.map(&:name) => []

【问题讨论】:

  • rake searchkick:reindex CLASS=Book 一定要指定正确的 CLASS,在你的情况下它应该是 rake searchkick:reindex CLASS=Ticket
  • 尝试先启动弹性搜索,然后用正确的类名重新索引

标签: ruby-on-rails elasticsearch searchkick


【解决方案1】:

在运行 rake searchkick 之前,您必须确保 elasticsearch 处于活动状态。

sudo service elasticsearch status
sudo service elasticsearch start

【讨论】:

  • ps aux | grep elasticsearch 也是查看 elasticsearch 是否正在运行的好方法。如果显示的不是 grep 进程,那么它正在运行。 @juju bah 也是正确的
  • 为什么要用sudo 运行它?
【解决方案2】:

运行后rake searchkick:reindex CLASS=Ticket 有没有发现什么错误?

我假设你和我有同样的问题,那就是关于数据库中的表

请确认如下:

您尝试搜索的表必须具有主键

如果表没有主键 Searchkick 将尝试通过排序表的列来重新索引,该列与您的表名同名,它可能有像你这样的问题,根据我的经验 searchkick:reindex 会在之后注意到一些错误你跑rake searchkick:reindex CLASS=your_model_class_name

每次编辑表格结构时,别忘了运行

rake searchkick:reindex CLASS=your_model_class_name

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2015-09-11
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多