小编Shi*_*gon的帖子

Solr,如何使用SolrJ的新字段更新模式(原子更新)

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字段?

solr updates multivalue solrj

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

全局变量的C隐式extern,它什么时候发生,它是如何工作的

我试图了解在多个文件(编译单元)之间共享 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任何地方添加吗?

c global-variables extern

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

Spring-Batch:如何从StepListener返回自定义作业退出代码

问题是这样的:我有一个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 spring-batch

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

表单的哈希表 - Java中的<key,hash table>

我只是想知道是否可以在表单的java中创建一个哈希表<key, hash table>.

基本上第一个键导致我到一个新的哈希表; 然后我用另一把钥匙搜索那张桌子.

java hashtable

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

使用正则表达式进行mongo elementMatch查询

好的,这个想法是这样的:

鉴于如下模型:

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)

谢谢

regex mongodb

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

检查非易失性变量变化的Java线程似乎需要永远

我很抱歉,如果我对此做了一件坏事,但我有一个问题,这是这个问题的衍生产品:

为什么java 5+中的volatile不会将变量的缓存副本与主内存同步?

基本上,我想看看当volatilea变量中消除时会发生什么.这是原始问题的代码,应用了我的修改:

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)

java multithreading volatile

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