小编Kos*_*tas的帖子

ElasticSearch:按嵌套文档的值排序

我在为我的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.

非常感谢你事先!此致,奥利维尔.

java sorting elasticsearch

6
推荐指数
1
解决办法
6825
查看次数

使用排队系统进行后续属性计算

对于以下所有假设:

  • rails v3.0
  • 红宝石v1.9
  • resque

我们有3个型号:

  • 产品 belongs_to:sku,belongs_to:category
  • Sku has_many:products,belongs_to:category
  • 类别 has_many:products,has_many:skus

当我们更新产品时(假设我们禁用它),我们需要在相关的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?

ruby queue resque ruby-on-rails-3

5
推荐指数
1
解决办法
145
查看次数

通过查询删除无效

我正在尝试删除日期低于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)

elasticsearch

5
推荐指数
1
解决办法
6590
查看次数

如何在多个平台上使用Yarn处理本机二进制文件?

我有一个带有几个模块的nodejs项目,其中一个(appdynamics)服务于本机二进制文件,具体取决于请求者的平台/体系结构.这与lockfile中纱线的指纹结合产生了一个问题:

  • 在macOS上,开发时,我有一个原生二进制文件
  • 在Linux上,部署时,我需要另一个原生二进制文件

由于上述指纹识别,纱线不允许开箱即用.

目前我发现的唯一解决方法是将代码库安装到Docker容器中并从那里运行yarn命令,然后提交锁定文件更改.

有没有更好的方法来实现这一目标?

javascript yarnpkg

5
推荐指数
0
解决办法
67
查看次数

有没有办法从ActiveRelation对象中删除分页?

假设@posts = Post.published.per(10).page(params[:page])我们的控制器中有某处.稍后我们需要更新所有已发布的帖子(Post.published).

如何删除分页?

@posts.limit(false).offset(false)似乎可以做到这一点,但我认为应该有其他方式,更高级的方式(类似的东西@posts.without_pagination).

ruby ruby-on-rails-3 kaminari

4
推荐指数
1
解决办法
683
查看次数

在Ruby中安全地需要宝石

有没有办法安全地要求红宝石宝石,以便在没有找到宝石时不引发异常?

我正在寻找一个接近这个的解决方案:

if require 'hirb'
  # do some hirb related stuff
else
  # do other stuff
end
Run Code Online (Sandbox Code Playgroud)

我希望这能确保没有不必要的宝石使我的部署失败.

ruby rubygems require

3
推荐指数
1
解决办法
326
查看次数

如何从ruby中的反引号命令中获取颜色?

在ruby文件中:

当我这样做时,system("rspec file_spec.rb")我得到一个漂亮的彩色输出.

当我这样做:

result = `rspec file_spec.rb`
puts result
Run Code Online (Sandbox Code Playgroud)

我根本没有颜色.

有没有办法保留颜色

顺便说一句,如果重要的话,我在OSX上使用Terminal.app.

ruby terminal console rspec

2
推荐指数
1
解决办法
836
查看次数

有没有办法着色git add --interactive模式?

我正在使用git add --patch很多,我正在寻找一种方法来使其输出着色(如in git diff --color).

那里有什么东西还是我应该尝试写一个包装器?

git command-line-interface

2
推荐指数
1
解决办法
845
查看次数

如何访问辅助规范中的params变量

我正在编写一些帮助程序的规范来检查params变量中的值.到现在为止我一直在做:

helper.stub!(:params).and_return(:user => {:username => "jack"})
Run Code Online (Sandbox Code Playgroud)

问题是,虽然实际的参数Hash具有字符串/符号不可知密钥params[:user] == params["user"],但我的实现不会产生各种故障而不应该这样做.

有没有办法在辅助规范中设置正确的(键类型不可知)params变量?

rspec2 ruby-on-rails-3

2
推荐指数
1
解决办法
1658
查看次数