1

我只是按照本教程将弹性搜索添加到我的应用程序中。

我在 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) => []
4

2 回答 2

0

运行后你rake searchkick:reindex CLASS=Ticket 有没有看到任何错误?

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

请确保以下内容:

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

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

每次编辑表格结构时,不要忘记运行

rake searchkick:reindex CLASS=your_model_class_name
于 2015-04-15T16:39:38.543 回答
0

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

sudo service elasticsearch status
sudo service elasticsearch start
于 2014-08-30T15:56:20.007 回答