1

このチュートリアルに従って、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) => []
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 に答える