我正在尝试编写一个脚本,将新用户记录添加到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) 我对ES很新,并且正在将它用于我的新项目.首先,我为客户提供了一个简单的映射,它具有名字和姓氏,以及付款信息对象列表.如果我在SQL中执行此操作,它将类似于客户表,以及具有1:多关系的支付信息表.
这是我正在尝试做的一个简单示例:https://gist.github.com/anonymous/6109593
我希望根据paymentInfos的嵌套数组中的任何匹配找到任何客户,即找到任何使用billingZip 10101的paymentInfo的用户.此查询不返回任何结果,我不知道为什么.任何人都可以指出我正确的方向,为什么这个查询不起作用,如果有任何变化,我可以对我的查询或映射,让它正确返回用户?
谢谢!
我的服务突然涌现出大量的日志文件,并没有限制写入的文件数量.日志(有点)名为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.
假设我的部署正确完成,可能出现什么问题?我误解了我改变的配置属性,还是还有其他的东西在这里?
谢谢大家!
我有一个瓶子服务器,它返回HTTPErrors:
return HTTPError(400, "Object already exists with that name")
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中收到此响应时,我希望能够找出给出的错误消息.就像现在一样,我可以在响应的responseText字段中看到错误消息,但它隐藏在一个HTML字符串中,如果我不需要,我宁愿不解析.
有什么办法可以在Bottle中专门设置错误信息,这样我就可以在浏览器的JSON中选择它了吗?
出于安全目的,我在我的公共站点中实现了 CSP 标头,并重构了代码以删除任何内联 javascript 实例,如 onclick=foo()和<a href='javascript: bar()'。
我们最近与将代码注入页面的第 3 方集成。每个面向公众的页面都需要这样做。问题是他们的代码包含大量内联 javascript(与上面提到的相同)并且违反了我们禁止内联脚本的 CSP 标头。
我的理解是,如果您必须'unsafe-inline'为脚本添加内容,那么由于存在剩余的安全风险,您还不如根本不实施 CSP。
我们能够更改每页的 CSP 标头,但由于每个页面都需要代码,因此似乎要么全部要么全无。
看起来您不能'unsafe-inline'只允许页面的特定部分,或者我们可以只允许该部分。
是我允许'unsafe-inline'和打败 CSP 的唯一选择吗?
我已经在一个功能部门工作了几个星期,并且有大约80个提交的历史,涉及我们项目的许多部分的工作.对于小功能,我只需要重新定义,将提交压缩成一个简洁的提交,合并它以进行开发,然后推送它.但在这里,我已经积累了很长的历史,承诺涉及许多不同的部分.
我想将它们拆分成较小的提交,即"功能F的完成部分A""完成部分B"等等,但是工作不是线性的,并且每个部分都是同时建立的.
我可以将它们全部压缩成一个提交并推送它,但是我会失去所有的历史记录,这可能会使调试在未来变得很痛苦,因为它是如此大的变化.
我不熟悉在专业环境中使用git,所以我不确定最佳实践.你对这种情况有什么看法?