我在为我的java应用程序使用ElasticSearch时遇到了麻烦.我自己解释一下,我有一个映射,它是这样的:
{
"products": {
"properties": {
"id": {
"type": "long",
"ignore_malformed": false
},
"locations": {
"properties": {
"category": {
"type": "long",
"ignore_malformed": false
},
"subCategory": {
"type": "long",
"ignore_malformed": false
},
"order": {
"type": "long",
"ignore_malformed": false
}
}
},
...
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,我收到了一个由位置组成的产品列表.在我的模型中,这些位置是所有类别的产品.这意味着产品可以是1个或更多类别.在此类别的每个类别中,产品都有一个订单,即客户希望显示订单的订单.
例如,钻石产品可以在珠宝首饰,但在女人的第三名(我的例子不是那么逻辑^^).因此,当我点击珠宝时,我想显示此产品,按字段location.order排序在此特定类别中.
目前,当我搜索特定类别的所有产品时,我收到的ElasticSearch响应如下:
{"id":5331880,"locations":[{"category":5322606,"order":1},
{"category":5883712,"subCategory":null,"order":3},
{"category":5322605,"subCategory":6032961,"order":2},.......
Run Code Online (Sandbox Code Playgroud)
是否可以通过元素locations.order对我正在搜索的特定类别进行排序?例如,如果我查询类别5322606,我希望获得此产品的订单1.
非常感谢你事先!此致,奥利维尔.
对于以下所有假设:
我们有3个型号:
当我们更新产品时(假设我们禁用它),我们需要在相关的sku和类别中发生一些事情.更新sku时也是如此.
实现这一目标的正确方法是after_save在每个模型上触发其他模型的更新事件.
例:
products.each(&:disable!)
# after_save triggers self.sku.products_updated
# and self.category.products_updated (self is product)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们有5000种产品,我们就可以享用.相同的类别可能会更新数百次,并在执行此操作时占用数据库.
我们还有一个很好的排队系统,所以更实际的更新产品的方法products.each(&:queue_disable!)就是将5000个新任务简单地投入到工作队列中.但是仍然存在5000类别更新的问题.
有没有办法避免数据库上的所有更新?
我们如何连接队列中每个类别的所有category.products_updated?
我正在尝试删除日期低于12月1日的文档但看起来它实际上并没有删除任何内容.
我尝试使用delete by query API:
curl -XPOST "http://localhost:9200/mediadata/events/_delete_by_query" -d'
{
"query": {
"range": {
"created_at": {
"lt": "2016-12-01 00:00:00"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
或者这个语法:
curl -XDELETE 'http://localhost:9200/mediadata/events/_query' -d ...
Run Code Online (Sandbox Code Playgroud)
我得到了这样的结果:
{"_index":"mediadata","_type":"events","_id":"_delete_by_query","_version":10,"_shards":{"total":3,"successful":2,"failed":0},"created":false}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:这是映射:
{
"mediadata": {
"mappings": {
"events": {
"properties": {
"channels": {
"properties": {
"kdata": {
"type": "string",
"index": "not_analyzed"
},
"mail": {
"type": "string",
"index": "not_analyzed"
},
"md5": {
"type": "string",
"index": "not_analyzed"
},
"mobile": {
"type": "string",
"index": "not_analyzed"
},
"ssp": {
"type": "string",
"index": "not_analyzed" …Run Code Online (Sandbox Code Playgroud) 我有一个带有几个模块的nodejs项目,其中一个(appdynamics)服务于本机二进制文件,具体取决于请求者的平台/体系结构.这与lockfile中纱线的指纹结合产生了一个问题:
由于上述指纹识别,纱线不允许开箱即用.
目前我发现的唯一解决方法是将代码库安装到Docker容器中并从那里运行yarn命令,然后提交锁定文件更改.
有没有更好的方法来实现这一目标?
假设@posts = Post.published.per(10).page(params[:page])我们的控制器中有某处.稍后我们需要更新所有已发布的帖子(Post.published).
如何删除分页?
@posts.limit(false).offset(false)似乎可以做到这一点,但我认为应该有其他方式,更高级的方式(类似的东西@posts.without_pagination).
有没有办法安全地要求红宝石宝石,以便在没有找到宝石时不引发异常?
我正在寻找一个接近这个的解决方案:
if require 'hirb'
# do some hirb related stuff
else
# do other stuff
end
Run Code Online (Sandbox Code Playgroud)
我希望这能确保没有不必要的宝石使我的部署失败.
在ruby文件中:
当我这样做时,system("rspec file_spec.rb")我得到一个漂亮的彩色输出.
当我这样做:
result = `rspec file_spec.rb`
puts result
Run Code Online (Sandbox Code Playgroud)
我根本没有颜色.
有没有办法保留颜色?
顺便说一句,如果重要的话,我在OSX上使用Terminal.app.
我正在使用git add --patch很多,我正在寻找一种方法来使其输出着色(如in git diff --color).
那里有什么东西还是我应该尝试写一个包装器?
我正在编写一些帮助程序的规范来检查params变量中的值.到现在为止我一直在做:
helper.stub!(:params).and_return(:user => {:username => "jack"})
Run Code Online (Sandbox Code Playgroud)
问题是,虽然实际的参数Hash具有字符串/符号不可知密钥params[:user] == params["user"],但我的实现不会产生各种故障而不应该这样做.
有没有办法在辅助规范中设置正确的(键类型不可知)params变量?