Rails – 如何在searchkick中过滤字符串字段?
在rails中,我使用searchkick
gem进行搜索。 我需要为filter添加一个名为status
字符串字段。 我该如何添加到这个插件?
我已经提出了一个关于这个问题的问题Rails – 如何在searchkick中为filter添加更多字段?
现在我尝试使用字符串字段而不是布尔值仍然搜索不起作用。 请帮我一下。
我添加了一个条件,例如where: {status: 'approved'}
,根据这个条件,我应该只获得活跃用户(不是’已删除’用户)。 现在没有显示搜索数据。
searchkick word_start: [:name] def initialize(name, limit = User::SUGGESTION_LIMIT, page = nil) @name = name @limit = limit @page = page @per_page = limit.to_i end query = { match: :word_start, where: {status: 'approved'}, fields: [{ emails: "exact" }, "name^5"], misspellings: { prefix_length: 2 }, load: false } User.search(name, query).records
另外我尝试添加像searchkick word_start: [:name], filterable: [:status]
这样的可过滤searchkick word_start: [:name], filterable: [:status]
服务器日志是,
Processing by UsersController#search as JSON Parameters: {"query"=>"sal"} ETHON: Libcurl initialized ETHON: performed EASY effective_url=http://elastic:changeme@14.127.18.141:9200/users-some_index-en/_search response_code=200 return_code=ok total_time=0.498938 User Search (589.3ms) curl http://14.127.18.141:9200/users-some_index-en/_search?pretty -d '{"query":{"bool":{"must":{"dis_max":{"queries":[{"match":{"emails.true":{"query":"sal","boost":10,"operator":"and","analyzer":"searchkick_autocomplete_search"}}},{"match":{"emails.true":{"query":"sal","boost":1,"operator":"and","analyzer":"searchkick_autocomplete_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}},{"bool":{"must":{"bool":{"should":[{"match":{"name.word_start":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}},{"match":{"name.word_start":{"query":"sal","boost":5.0,"operator":"and","analyzer":"searchkick_word_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"should":{"match":{"name.analyzed":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}}}}]}},"filter":[{"term":{"status":"approved"}}]}},"size":5,"from":0,"timeout":"11s"}' User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ETHON: performed EASY effective_url=http://elastic:changeme@14.127.18.141:9200/entities-some_index-en/_search response_code=200 return_code=ok total_time=0.251783
根据您的情况更改scope :search_import
并修改should_index?
方法,像,
def should_index? User.search_import end
更改后,请在after_update
任何数据后单独调用reindex
- 法拉第:: ConnectionFailed,连接被拒绝 – 连接(2)为“localhost”端口9200错误Ruby on Rails
- Elasticsearch结果到表
- 在Logstash中转换时间戳时区以获取输出索引名称
- 如何使用elasticsearch / searchkick在我的导航栏上运行搜索栏并在特定页面中显示结果?
- Rails 5:如何在弹性搜索中导入数据并执行条件搜索?
- 如何在新的Nitrous.io IDE上设置SearchKick / ElasticSearch?
- Rails 4,elasticsearch-rails
- 使用rest-client ruby gem在elasticsearch get请求中传递json数据