Solr 4.x具有这个不错的新功能,可让您指定在对现有文档进行更新时如何更新multiValued字段.具体来说,您可以说更新文档是否将使用新值替换多值字段的旧值,或者是否应将新值附加到现有值.
我已经使用请求处理程序尝试了这个,如下所述:
http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22
我使用curl发送xml,其中一些字段使用了该update=add选项:
<field name="skills" update="add">Python</field>
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
但是我无法知道如何使用Java API(SolrJ).
如果我做这样的事情:
SolrInputDocument doc1 = new SolrInputDocument();
doc1.setField("ID_VENTE", "idv1");
doc1.setField("FACTURES_PRODUIT", "fp_initial");
solrServer.add(doc1);
solrServer.commit();
SolrInputDocument doc2 = new SolrInputDocument();
doc2.setField("ID_VENTE", "idv1");
doc2.setField("FACTURES_PRODUIT", "fp_2");
solrServer.add(doc2);
solrServer.commit();
Run Code Online (Sandbox Code Playgroud)
字段"FACTURES_PRODUIT"的值变为"fp_2"(初始值丢失).我也尝试过:
doc2.addField("FACTURES_PRODUIT", "fp_2");
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.我也查看了SolrInputField类,但没有找到类似的东西.
所以,我的问题是,如何通过附加(而不是替换)新值来使用Solr 4 Java API将值更新到multiValued字段?
我试图了解在多个文件(编译单元)之间共享 C 全局变量的方式。我读过优秀的问题和答案在这里。然而,在做了一些测试之后,我仍然有一些我没有得到的东西:
基本上我的问题是:如果在没有extern关键字的头文件中声明(但未定义)一个变量,是否可以简单地将该头文件包含在各种编译单元中,以便使该变量可用于所有这些编译单元?在这种情况下,这意味着一个(并且只有一个)编译单元包含用于初始化(定义?)该变量的代码,并且在其他编译单元尝试对该变量执行任何操作之前,它将首先被调用。如果这一切都是真的,那么这个过程是否称为“隐式外部”?
我将用一个例子来说明我的问题:
标题“MyCommonHeader.h”包含:
//MyCommonHeader.h
int* i; //pointer to an int
Run Code Online (Sandbox Code Playgroud)
文件 MyFirstHeader.h 包含:
//MyFirstHeader.h
void changeIt(int newValue);
Run Code Online (Sandbox Code Playgroud)
文件 MyFirstSource.c 包含:
//MyFirstSource.c
#include "MyFirstHeader.h"
void changeIt(int newValue) {
*i = newValue;
}
Run Code Online (Sandbox Code Playgroud)
文件 MySecondSource.c 包含:
//MySecondSource.c
#include "MyCommonHeader.h"
#include "MyFirstHeader.h"
void main() {
i = malloc(sizeof(int));
changeIt(10);
*i = 23;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是否到处都使用相同的 i 变量?我需要在extern任何地方添加吗?
问题是这样的:我有一个Spring Batch作业.此步骤被多次调用.如果每次调用它一切正常(没有异常),则作业状态为"已完成".如果至少在Step的一个执行中发生了一些不好的事情(抛出异常),我已经配置了一个StepListener,它将退出代码更改为FAILED:
public class SkipCheckingListener extends StepExecutionListenerSupport {
public ExitStatus afterStep(StepExecution stepExecution) {
String exitCode = stepExecution.getExitStatus().getExitCode();
if (stepExecution.getProcessorSkipCount() > 0) {
return new ExitStatus(ExitStatus.FAILED);
}
else {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,当满足条件时,"if"块被激活并且作业以状态FAILED结束.但请注意,我返回的退出代码仍然是Spring Batch附带的标准代码.我想在某些时候返回我的个性化退出代码,例如"已完成SKIPS".现在我已经尝试更新上面的代码来返回:
public class SkipCheckingListener extends StepExecutionListenerSupport {
public ExitStatus afterStep(StepExecution stepExecution) {
String exitCode = stepExecution.getExitStatus().getExitCode();
if (stepExecution.getProcessorSkipCount() > 0) {
return new ExitStatus("COMPLETED WITH SKIPS");
}
else {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如文档中所述:http://static.springsource.org/spring-batch/reference/html/configureStep.html(5.3.2.1.批处理状态与退出状态).我甚至试过了
stepExecution.getJobExecution().setExitStatus("COMPLETED WITH SKIPS");
Run Code Online (Sandbox Code Playgroud)
果然,执行到达"if"块,执行代码,然后我的工作仍以退出代码COMPLETED结束,完全忽略我通过监听器设置的退出代码.
在他们的文档中没有更多关于此的详细信息,我还没有找到任何使用Google的内容.有人可以告诉我如何以这种方式更改Job退出代码?感谢名单
我只是想知道是否可以在表单的java中创建一个哈希表<key, hash table>.
基本上第一个键导致我到一个新的哈希表; 然后我用另一把钥匙搜索那张桌子.
好的,这个想法是这样的:
鉴于如下模型:
Release {
Work[] works = ....
}
Run Code Online (Sandbox Code Playgroud)
和
Work {
String title;
}
Run Code Online (Sandbox Code Playgroud)
我得到了如何使用标准搜索版本"有标题的工作=什么":
DBObject crit = new BasicDBObject();
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "whatever")));
Run Code Online (Sandbox Code Playgroud)
我还得到了如何使用正则表达式来处理基本内容,例如"获取所有包含任何内容的tile":
crit.put("title", "/.*whatever.*/");
Run Code Online (Sandbox Code Playgroud)
但是,我该如何做一些像"获得所有版本以及包含任何内容的标题"的内容?
如果我试试这个,我什么也得不到:
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "/.*whatever.*/")));
Run Code Online (Sandbox Code Playgroud)
谢谢
我很抱歉,如果我对此做了一件坏事,但我有一个问题,这是这个问题的衍生产品:
为什么java 5+中的volatile不会将变量的缓存副本与主内存同步?
基本上,我想看看当volatile从a变量中消除时会发生什么.这是原始问题的代码,应用了我的修改:
public class Test {
//volatile static private int a;
static private int a;
static private int b;
public static void main(String [] args) throws Exception {
for (int i = 0; i < 100; i++) {
new Thread() {
@Override
public void run() {
int tt = b; // makes the jvm cache the value of b
while (a==0) {
}
//some threads never get here (past the a==0 loop)
if (b …Run Code Online (Sandbox Code Playgroud)