当前位置: 首页 > 知识库问答 >
问题:

如何在c应用程序中使用solr

连志义
2023-03-14

我正在用c开发一个应用程序,我想使用solr来索引sqlite数据库,我在网上搜索了一下,发现我需要使用JNI:http://randr . svbtle . com/experiment-with-embedded-Solr-in-Java-and-c,但是我发现jar有很多问题(我使用了\solr-4.9.0\dist\solrj-lib和\solr-4.9.0\dist和\solr-4.9.0\example\lib\ext下的jar)

共有1个答案

东门俊民
2023-03-14

我以前从未使用过Solr,但这里有一种使用JavaCPP和Maven的方法。首先,创建这个pom。xml构建文件:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>solrtest</artifactId>
    <version>0</version>
    <dependencies>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <version>0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-core</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.7</version>
        </dependency>   
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.bytedeco</groupId>
                <artifactId>javacpp</artifactId>
                <configuration>
                    <header>true</header>
                    <includePath>.</includePath>
                    <linkPath>.</linkPath>
                    <preloadPath>.</preloadPath>
                </configuration>
                <executions>
                    <execution>
                        <id>process-classes</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.solr</groupId>
                        <artifactId>solr-solrj</artifactId>
                        <version>1.4.1</version>
                    </dependency>
                    <dependency>
                        <artifactId>solr-core</artifactId>
                        <groupId>org.apache.solr</groupId>
                        <version>1.4.1</version>
                    </dependency>
                </dependencies>
            </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
        </plugins>
    </build>
</project>

以及这个 src/主/爪哇/索尔.java源文件:

import java.io.*;
import org.apache.solr.core.*;
import org.apache.solr.client.solrj.*;
import org.apache.solr.client.solrj.embedded.*;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.annotation.*;

public class SolrTest {
    static SolrServer createServer(String coreName) throws Exception {
        CoreContainer coreContainer = new CoreContainer();
        CoreDescriptor discriptor = new CoreDescriptor(coreContainer, coreName, new File("/some/path/", coreName).getAbsolutePath());
        SolrCore solrCore = coreContainer.create(discriptor);
        coreContainer.register(solrCore, false);
        return new EmbeddedSolrServer(coreContainer, coreName);
    }

    static class Query extends FunctionPointer {
        public @Name("query") String call(String string) throws Exception { 
            createServer(string);
            return string;
        }
    }
}

然后我们可以执行mvn包,在它下载了一大堆东西并为我们构建了东西之后,我们将最终得到目标/solrtest-0.jar以及目标/类子目录中的头文件和本机库文件。现在,我们可以用这样的程序在C语言中将所有这些链接在一起:

#include <iostream>
#include "target/classes/jniSolrTest.h"

int main() {
    const char *argv[] = { "-Djava.class.path=target/solrtest-0.jar" };
    JavaCPP_init(1, argv);
    try {
        query("test");
    } catch (std::exception &e) {
        std::cout << e.what() << std::endl;
    }
    JavaCPP_uninit();
}

例如,我们可以在Linux x86_64下以这种方式编译和运行,但是我们可以在其他平台上做等效的事情:

$ g++ -I/usr/lib/jvm/java/include/ -I/usr/lib/jvm/java/include/linux/ target/classes/linux-x86_64/libjniSolrTest.so query.cpp -o query
$ ./query

我们从Solr那里得到了一个适当的例外:

[main] INFO org.apache.solr.core.SolrResourceLoader - JNDI not configured for solr (NoInitialContextEx)
[main] INFO org.apache.solr.core.SolrResourceLoader - solr home defaulted to 'solr/' (could not find system property or JNDI)
[main] INFO org.apache.solr.core.SolrResourceLoader - Solr home set to '/some/path/test/'
java.lang.RuntimeException: Can't find resource 'solrconfig.xml' in classpath or '/some/path/test/conf/', cwd=/home/saudet/solrtest

我们可以通过为Solr安装一些东西来修复。。。

 类似资料:
  • 问题内容: 在C ++程序中使用Redis数据库的最佳方法是什么? 问题答案: 使用C绑定库?似乎在任何地方都没有C ++包装器。

  • 问题内容: 因此,我正在使用C#开发一个应用程序以从Web读取一些信息,但这是一个Windows窗体应用程序。我得到一个JSON字符串,我需要从中获取一些信息。我知道有一个用于C#Web应用程序的库,但是如何在Windows窗体应用程序中使用呢? 问题答案: 那里有许多JSON库。您可以考虑以下三个建议: Json.NET ,一个相当流行的JSON(反序列化)库。 ****根据 ServiceSt

  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我试图理解我们什么时候需要使用这个应用程序。在我们的node Express中使用 当我在网上搜索时,我在reddit上偶然发现了这个答案,它说明了应用程序之间的区别。获取和应用程序。使用 在此基础上,我总结了以下几点。 充当超级路由或中间件?这意味着它在? 此外,如果有人能添加更多关于app.use.的信息/练习,我将不胜感激

  • 问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate