提问者:小点点

Searchkick::InvalidQueryError 400 在 cloud9 中运行 elasticsearch/searchkick 时出错?


我使用命令在cloud d9中运行弹性搜索

./elasticsearch -E http.port=8081

然后我通过运行curl检查状态

 curl 127.0.0.1:8081

它返回

{
  "name" : "JgfOdbe",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zELSmBAIStOB1VNaOz1C-Q",
  "version" : {
    "number" : "6.1.1",
    "build_hash" : "bd92e7f",
    "build_date" : "2017-12-17T20:23:25.338Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

现在我做了一个书架,做了几本书

在书籍控制器中,我创建了一个测试方法

def index
    @books = Book.search("test", fields: [:title])
end

当我调用索引操作时,它返回错误

Searchkick::InvalidQueryError in BooksController#index

我在错误图像下面粘贴了

我想知道这个错误的原因。似乎语法是正确的。我感谢任何帮助!谢谢!


共2个答案

匿名用户

我认为有两个问题需要解决:

由于您使用的是与默认端口(9200)不同的端口(8081),您应该将< code>ELASTICSEARCH_URL环境变量设置为该端口:

ENV["ELASTICSEARCH_URL"] = "http://localhost:8081"

有关此的文档如下:https://github.com/ankane/searchkick#deployment

之后,您需要将数据从模型获取到 Elasticsearch,方法是使用以下方式重新索引:

Book.reindex

文件也在这里:https://github.com/ankane/searchkick#getting-started

匿名用户

必须从类中而不是从对象中进行重新索引。

当从object运行reindex时,诸如analyzer之类的一些信息没有被创建,并且抛出了这个异常。

# Works!
Book.reindex

# Not works :(
Book.limit(1000).offset(0).each { |book| book.reindex }

在此处查看更多信息。