小编Sev*_*lix的帖子

Elasticsearch upserting并附加到数组

我正在尝试编写一个脚本,将新用户记录添加到ElasticSearch,如果用户已经存在则更新任何信息,并将新的PaymentInfo对象附加到用户的Payments数组(如果它存在于更新对象中).这是我目前使用的简化版本:

curl -XPOST 'http://localhost:9200/usrtest/usr/1/_update' -d '
{
    "doc_as_upsert": true, 
    "doc": {
        "customerId": "1",
        "firstName": "Mark",
        "lastName": "Z",
        "emailAddress": "foo.bar@gmail.com",
        "paymentInfo": {
            "pid": "1",
            "amt": "10"
        }
    }
}'
Run Code Online (Sandbox Code Playgroud)

这几乎可以满足我的需求,因为它可以正确地插入文档,或者如果用户存在具有相同ID的情况下更新文档,但是如果用户已经存在,则缺少将此paymentInfo添加到用户的paymentInfos数组的方面.就像现在一样,它只是覆盖了paymentInfo对象.我已经尝试将此脚本添加到更新JSON:

"script": "if (ctx._source.containsKey(\"paymentInfos\")) {ctx._source.paymentInfos += paymentInfo;} else {ctx._source.paymentInfos = paymentInfo}"
Run Code Online (Sandbox Code Playgroud)

但是弹性搜索doc在script指定元素时忽略元素.

我觉得我在这里错过了一些愚蠢的东西,但我不确定.这里有人可以帮帮我吗?

编辑: 我也尝试了以下内容:

curl -XPOST 'http://localhost:9200/usrtest/usr/1/_update' -d '
{    
    "script": "if (ctx._source.containsKey(\"paymentInfos\")) {ctx._source.paymentInfos += paymentInfo;} else {ctx._source.paymentInfos = paymentInfo}",
    "upsert": {
        "customerId": "1",
        "firstName": "Mark",
        "lastName": "Z",
        "emailAddress": "foo.bar@gmail.com",
        "paymentInfo": {
            "pid": "1",
            "amt": "10"
         } …
Run Code Online (Sandbox Code Playgroud)

upsert elasticsearch

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

ElasticSearch:搜索嵌套数组中的字段

我对ES很新,并且正在将它用于我的新项目.首先,我为客户提供了一个简单的映射,它具有名字和姓氏,以及付款信息对象列表.如果我在SQL中执行此操作,它将类似于客户表,以及具有1:多关系的支付信息表.

这是我正在尝试做的一个简单示例:https://gist.github.com/anonymous/6109593

我希望根据paymentInfos的嵌套数组中的任何匹配找到任何客户,即找到任何使用billingZip 10101的paymentInfo的用户.此查询不返回任何结果,我不知道为什么.任何人都可以指出我正确的方向,为什么这个查询不起作用,如果有任何变化,我可以对我的查询或映射,让它正确返回用户?

谢谢!

elasticsearch

7
推荐指数
1
解决办法
1万
查看次数

log4net RollingFileAppender喷出大量日志,maxSizeRollBackups无效

我的服务突然涌现出大量的日志文件,并没有限制写入的文件数量.日志(有点)名为MyService.2015-01-08.1,MyService.2015-01-08.2,MyService.2015-01-08.3等,一直到218为止.我想将此限制为每天10次,而不是像现在这样无限制.以下是日志配置的内容:

<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="-1" />
  <countDirection value="1" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

我做了一些改变,如下所示.值得注意的是,我已经设置maxSizeRollBackups为10,我认为这可以解决问题,但似乎并没有产生任何影响.

<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
   </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

已经部署了更改,但它仍在创建新的日志文件,超过新设置的10.

假设我的部署正确完成,可能出现什么问题?我误解了我改变的配置属性,还是还有其他的东西在这里?

谢谢大家!

.net c# logging log4net log4net-appender

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

如何使用Bottle HTTPError在JSON中返回错误消息?

我有一个瓶子服务器,它返回HTTPErrors:

return HTTPError(400, "Object already exists with that name")
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中收到此响应时,我希望能够找出给出的错误消息.就像现在一样,我可以在响应的responseText字段中看到错误消息,但它隐藏在一个HTML字符串中,如果我不需要,我宁愿不解析.

有什么办法可以在Bottle中专门设置错误信息,这样我就可以在浏览器的JSON中选择它了吗?

python json bottle

5
推荐指数
2
解决办法
6531
查看次数

在我的站点中实现了 CSP,但第 3 方库使用内联 javascript。我可以选择性地允许“不安全内联”吗?

出于安全目的,我在我的公共站点中实现了 CSP 标头,并重构了代码以删除任何内联 javascript 实例,如 onclick=foo()和<a href='javascript: bar()'。

我们最近与将代码注入页面的第 3 方集成。每个面向公众的页面都需要这样做。问题是他们的代码包含大量内联 javascript(与上面提到的相同)并且违反了我们禁止内联脚本的 CSP 标头。

我的理解是,如果您必须'unsafe-inline'为脚本添加内容,那么由于存在剩余的安全风险,您还不如根本不实施 CSP。

我们能够更改每页的 CSP 标头,但由于每个页面都需要代码,因此似乎要么全部要么全无。

看起来您不能'unsafe-inline'只允许页面的特定部分,或者我们可以只允许该部分。

是我允许'unsafe-inline'和打败 CSP 的唯一选择吗?

html javascript security web content-security-policy

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

Git:我有一个80多次提交的功能分支.如何在不破坏历史的情况下将其安全地合并到开发/生产中?

我已经在一个功能部门工作了几个星期,并且有大约80个提交的历史,涉及我们项目的许多部分的工作.对于小功能,我只需要重新定义,将提交压缩成一个简洁的提交,合并它以进行开发,然后推送它.但在这里,我已经积累了很长的历史,承诺涉及许多不同的部分.

我想将它们拆分成较小的提交,即"功能F的完成部分A""完成部分B"等等,但是工作不是线性的,并且每个部分都是同时建立的.

我可以将它们全部压缩成一个提交并推送它,但是我会失去所有的历史记录,这可能会使调试在未来变得很痛苦,因为它是如此大的变化.

我不熟悉在专业环境中使用git,所以我不确定最佳实践.你对这种情况有什么看法?

git merge

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