我有两种测试方法.第一个工作正常.第二个不会抛出异常,但它应该.为什么第二个不抛出异常?
[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedBlock()
{
checked
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = (int)longValue;
}
}
[TestMethod]
[ExpectedException(typeof(OverflowException))]
public void LongToInt_OverflowWithCheckedStatement()
{
int maxValue = 2147483647;
long longValue = (maxValue + 1);
int intValue = checked((int)longValue); // No Exception is thrown, why?
}
Run Code Online (Sandbox Code Playgroud) 我知道,弹性搜索在计算查询检索到的文档的分数时会考虑字段的长度.场越短,重量越大(参见场长标准).
我喜欢这样的行为:当我搜索iphone我更感兴趣的是iphone 6比Crappy accessories for: iphone 5 iphone 5s iphone 6.
现在,我想尝试提升这些东西,让我们说我想要加倍它的重要性.
我知道可以使用功能分数修改分数,我想我可以通过脚本分数达到我想要的效果.
我试图在这个分数中添加另一个字段长度范数:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我失败了,得到了这个错误: [No parser for element [function_score]]
编辑:
我的第一个错误是我没有将功能分数包装在"查询"中.现在我编辑了上面的代码.我的新错误说
GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values:
[<org.elasticsearch.search.lookup.DocLookup@2c935f6f>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
Run Code Online (Sandbox Code Playgroud)
编辑:我提供了第一个答案,但我希望有一个更好的答案
我设置了一个会话cookie,它没有任何到期日期,因此在浏览器关闭时会被删除.
现在我想添加一个最大到期日期,这意味着
请注意,我不想设置"常规"到期日期,因为这会使我的cookie 持久化,在浏览器在到期日之前关闭时无法删除.
我找到的唯一解决方案是拥有一个具有最大到期日期的第二个持久性cookie:如果找不到第二个cookie(过期),我手动删除我的第一个cookie.由于我想在cookie中尽可能少地写信息,我更愿意,如果有另一种方式.
@ CBroe的评论后,我补充说,cookie是在客户端生成的,我没有关联的服务器端会话,在那里存储最后一个访问时间戳
2018年更新
在对这个问题开始赏金之后,我得到了几个答案.谢谢.作为反馈,可能更好地澄清我的问题的目的,请注意我不是在寻找代码来设置持久性cookie或实现我已经拥有的解决方案(设置第二个持久性cookie).我希望得到一些其他的创意建议.目前,我可以使用Zeeshan的提示并在值中设置时间戳(我会将其附加到实际值).因此,答案是迄今为止获得赏金的最佳候选人.
在我的 Maven 项目中,我通常使用名为pom.xml的 POM 文件。不过,我有第二个 POM 文件(称为pom_alt.xml),我偶尔会用它来执行同一项目的非常不同的构建。为此,我-f在命令行中指定该选项
mvn clean package -fpom_alt.xml
Run Code Online (Sandbox Code Playgroud)
正如建议的man mvn:
-f,--file
Force the use of an alternate POM file.
Run Code Online (Sandbox Code Playgroud)
现在,当我在 eclipse 中编码时,我通常需要 maven 来使用pom.xml ,但有时我应该在使用其他文件pom_alt.xml时进行编码或调试。有没有办法告诉 eclipse maven 集成使用该文件?目前,我暂时从pom_alt.xml复制粘贴到pom.xml,因为我很少需要它,但您可以看到这不是最佳选择。
我使用的是面向 Java EE 开发人员的 Eclipse IDE,Mars 版本 4.5.0。
更新
我可以从命令行构建或使用Run As Maven 构建,如 Carlos Andres 的解决方案,但理想情况下我想定义一个持久设置,例如属性或首选项。这是因为我发现,如果在我执行 Java 应用程序和测试用例运行或在服务器上执行等操作时可以修复 POM 文件,那就太好了。需要清理项目或重新启动服务器的进程通常会触发使用默认 POM 的 Maven 构建。
我们需要释放一些 MongoDB 空间,并且我们确定了可以从集合中安全删除的超过 100Gb 的文档。
因此,我们将它们从具有以下设置的测试环境中删除:
完成后,我们发现磁盘上的空间仍然被使用,需要回收。我们找到了这篇文章,它对我们有帮助:运行完两者后
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
和
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
我们释放了 100Gb 以上。
然后我们继续生产,忘记了设置是不同的,因为我们有 1 个副本节点:
删除文档后,我们运行
db.runCommand({repairDatabase: 1})
Run Code Online (Sandbox Code Playgroud)
并收到OK消息(过了一会儿,10 分钟以上)。我们尝试跑步
db.runCommand({compact: collection-name })
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
不会在活动副本集主节点上运行紧凑型操作,因为这是一个缓慢的阻塞操作。用力:真实用力
所以我们跑
db.runCommand({compact: collection-name, force: true })
Run Code Online (Sandbox Code Playgroud)
并收到“确定”消息(几乎立即),但空间上的磁盘仍然被使用,它没有被释放。
我们寻找使用副本集运行repairDatabase和compact命令的解决方案,但建议的重点是避免停机,就好像这是唯一的问题一样。但是,我们可以安排停机时间,但我们的问题是命令无法按预期工作,因为空间实际上并未被回收。
我们做错了什么?
在 redis 中,我将对象存储在一个有序集合中。在我的解决方案中,能够按日期运行范围查询很重要,因此我将分数存储为每个项目的时间戳的项目,例如:
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
Run Code Online (Sandbox Code Playgroud)
但是,在其他情况下,我需要根据它的 ID 在集合中找到单个项目。我知道我不能只查询这个数据结构,就好像它是一个 nosql db,但我尝试使用ZSCAN,但没有用。
ZSCAN MySet 0 MATCH Id:92 count 1
Run Code Online (Sandbox Code Playgroud)
它回来了;“空列表或集合”
也许我需要序列化不同的?我已经使用 Json.Net 进行了序列化。
如果可能的话,我怎样才能做到这一点;使用日期作为分数并且仍然能够通过它的 ID 查找一个项目?
非常感谢,
拉斯
编辑:
假设这是不可能的,但欢迎提出任何想法或意见:
参考:http : //openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-1/
在Redis中,数据只能通过key来查询。即使我们使用散列,我们也不能说在字段竞赛等于 sayan 的任何地方给我获取密钥。
编辑2:
我试图做:
ZSCAN MySet 0 MATCH *87*
127.0.0.1:6379> ZSCAN MySet 0 MATCH *87*
1) "192"
2) 1) "{\"Id\":\"64\",\"Ref\":\"XQH4\",\"DTime\":1443837798,\"ATime\":1444187707,\"ExTime\":0,\"SPName\":\"XQH4BPGW47FM\",\"StPName\":\"XQH4BPGW47FM\"}"
2) "1443837798"
3) "{\"Id\":\"87\",\"Ref\":\"5CY6\",\"DTime\":1443519199,\"ATime\":1444172326,\"ExTime\":0,\"SPName\":\"5CY6DHP23RXB\",\"StPName\":\"5CY6DHP23RXB\"}"
4) "1443519199"
Run Code Online (Sandbox Code Playgroud)
它会找到所需的项目,但还会在属性 ATime 中找到另一个出现次数为 87 的项目。拥有更多唯一、更长的 ID 可能会以这种方式工作,我将不得不在代码中过滤结果以在其属性中找到具有确切值的结果。
仍然开放的建议。