标签: spring-data-solr

java.lang.IllegalArgumentException:环境不能为null

我尝试设置一个基本的SolrRepository应用程序并在ApplicationContext加载期间出现此错误:

Caused by: java.lang.IllegalArgumentException: Environment must not be null!
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.<init>(RepositoryConfigurationSourceSupport.java:50)
    at org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource.<init>(AnnotationRepositoryConfigurationSource.java:74)
    at org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions(RepositoryBeanDefinitionRegistrarSupport.java:74)
    at org.springframework.context.annotation.ConfigurationClassParser.processImport(ConfigurationClassParser.java:394)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:204)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:163)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:138)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:284)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:225)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:120)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248)
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)
    ... 28 more
Run Code Online (Sandbox Code Playgroud)

这是我的ConfigClass:

@Configuration
@PropertySource("classpath:sandbox.properties")
@ComponentScan("sandbox.solr")
@EnableSolrRepositories(basePackages = { "sandbox.solr.repository" }, multicoreSupport = true)
public class StreamingSolrConf {

    @Resource
    private Environment env;

    @Bean
    public SolrServer solrServer() {
        return new HttpSolrServer(env.getRequiredProperty("solr.server.url"));
    }

    @Bean
    public SolrTemplate …
Run Code Online (Sandbox Code Playgroud)

spring spring-data spring-data-solr

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

如何使用 spring data solr 在 solr 中插入嵌套文档?

我需要将此类数据插入到 solr 服务器。

{
    "id":"09123"
    "firstName": "Harshana651175279",
    "lastName": "Samaranayake332146645",
    "department": {
            "id":"001",
            "depName":"dep01"        
        }
}
Run Code Online (Sandbox Code Playgroud)

这些是我用于插入数据的 POJO。

public class SolrCustomer {

    @Id
    @Indexed
    private String id;
    @Field
    @Indexed
    private String firstName;
    @Field
    @Indexed
    private String lastName;
    @Field
    private Department department;

    //getters n setters
}

public class Department {

    @Id
    @Indexed
    private String id;
    @Field
    @Indexed
    private String departmentName;

    //getters n setters
}
Run Code Online (Sandbox Code Playgroud)

没有部门数据它工作正常。但无法作为嵌套文档插入。当我尝试时,就像这样插入

{
    "firstName": "Harshana651175279",
    "lastName": "Samaranayake332146645",
    "department": [
        "org.ftm.solr.domain.Department@479c1814"
    ],
    "id": "2e204ab3-772d-4af1-a2be-866e21206ecd",
    "_version_": 1536317096485453800
}
Run Code Online (Sandbox Code Playgroud)

这是我为此配置的架构。

<field name="department" …
Run Code Online (Sandbox Code Playgroud)

java spring solr solrj spring-data-solr

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

Spring数据Solr:IllegalArgumentException - 此参数是必需的

每当我尝试使用Spring数据存储库查询Solr时,我都会遇到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
    at org.springframework.util.Assert.notNull(Assert.java:112)
    at org.springframework.util.Assert.notNull(Assert.java:123)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$SolrPropertyValueProvider.readValue(MappingSolrConverter.java:317)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$SolrPropertyValueProvider.readCollection(MappingSolrConverter.java:423)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$SolrPropertyValueProvider.readValue(MappingSolrConverter.java:331)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$SolrPropertyValueProvider.readValue(MappingSolrConverter.java:308)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$SolrPropertyValueProvider.getPropertyValue(MappingSolrConverter.java:294)
    at org.springframework.data.solr.core.convert.MappingSolrConverter.getValue(MappingSolrConverter.java:147)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$1.doWithPersistentProperty(MappingSolrConverter.java:134)
    at org.springframework.data.solr.core.convert.MappingSolrConverter$1.doWithPersistentProperty(MappingSolrConverter.java:126)
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257)
    at org.springframework.data.solr.core.convert.MappingSolrConverter.read(MappingSolrConverter.java:126)
    at org.springframework.data.solr.core.convert.MappingSolrConverter.read(MappingSolrConverter.java:113)
    at org.springframework.data.solr.core.convert.MappingSolrConverter.read(MappingSolrConverter.java:88)
    at org.springframework.data.solr.core.SolrTemplate.convertSolrDocumentListToBeans(SolrTemplate.java:404)
    at org.springframework.data.solr.core.SolrTemplate.convertQueryResponseToBeans(SolrTemplate.java:396)
    at org.springframework.data.solr.core.SolrTemplate.queryForPage(SolrTemplate.java:276)
    at org.springframework.data.solr.repository.query.AbstractSolrQuery$AbstractQueryExecution.executeFind(AbstractSolrQuery.java:312)
    at org.springframework.data.solr.repository.query.AbstractSolrQuery$CollectionExecution.execute(AbstractSolrQuery.java:335)
    at org.springframework.data.solr.repository.query.AbstractSolrQuery.execute(AbstractSolrQuery.java:129)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:323)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at $Proxy15.findByTitleStartingWith(Unknown Source)
    at …
Run Code Online (Sandbox Code Playgroud)

solr spring-data spring-data-solr

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

如何修复 LockObtainFailedException:锁获取超时?

当我从 Gradle 任务运行它们时,我的集成测试失败了。

org.springframework.data.solr.UncategorizedSolrException: **SolrCore 'collection1' is not available due to init failure: Error opening new searcher; nested exception is org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: Error opening new searcher**
at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:122)
at org.springframework.data.solr.core.SolrTemplate.saveDocuments(SolrTemplate.java:206)
at org.springframework.data.solr.core.SolrTemplate.saveDocuments(SolrTemplate.java:201)
Run Code Online (Sandbox Code Playgroud)

org.apache.lucene.store.LockObtainFailedException:锁获取超时:NativeFSLock@/opt/solr/example/solr/collection1/data/index/write.lock

当我直接在 Intellij 中运行集成测试时,测试成功运行。这是我对嵌入式服务器的 bean 定义。我添加了 destroyMethod 并且它没有效果。

 @Bean(destroyMethod = "shutdown")
public SolrServer solrServer(org.apache.commons.configuration.Configuration configuration)  {

    EmbeddedSolrServerFactory factory;
    try {
        factory = new EmbeddedSolrServerFactory(configuration.getString("solr.home"));
    } catch (ParserConfigurationException | IOException | SAXException e) {
        String errorMsg = "Encountered an exception while …
Run Code Online (Sandbox Code Playgroud)

solr exception spring-data-solr

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

如何在tomcat上使用maven在Spring MVC中集成apache solr

我正在使用spring MVC开发一个Web应用程序,我使用tomcat托管它.我有一个要求,我想将apache-solr集成到我的搜索引擎.

我尝试在互联网上查找各种教程,但找不到合适的解释步骤.

所以我的要求是

  1. 如何使用maven依赖(我使用tomcat来托管服务器)在Spring MVC中集成apache solr
  2. 使用solr添加数据文件的基本教程
  3. 如何集成它以从我的数据库中获取数据.我正在使用hibernate来映射我的数据库表.

经过一些教程后,我认为spring-data-solr适用于spring MVC.

PS我是上述所有技术的新手.

solr hibernate spring-mvc maven spring-data-solr

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

Spring data solr - Bean with Highlight

我正在编写一个与 Solr 通信的 Web 应用程序,我正在使用 Spring Data Solr + SolrJ 来获取 Java 中的信息。

对于 Solr 查询,我使用 (e)DisMax 和一些选项(现在,也许以后我需要添加其他内容):

SolrQuery query = new SolrQuery();
        
query.set("q", terms);
query.set("pf", "text^100");
query.set("qf", "text");
query.set("defType", "edismax");
        
query.setStart(pageable.getOffset());
query.setRows(pageable.getPageSize());
        
query.setHighlight(true).setHighlightSnippets(10);
query.setParam("hl.fl", "text");
Run Code Online (Sandbox Code Playgroud)

对于这种结构,我以这种方式构建了一个 bean

@SolrDocument
public class Document {
    
    @Field
    private String id;
    
    @Field
    private String text;
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text …
Run Code Online (Sandbox Code Playgroud)

solr solrj spring-data-solr

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

Spring Data Solr - 用 OR 分隔的多个 FilterQueries

我正在尝试使用 spring data solr 实现过滤器搜索。我有以下过滤器类型,并且都有一组过滤器。

  1. A
    • (1,2,3) 中的 aa
    • ab 之间 (2016-08-02 至 2016-08-10)
    • 巴 (2,3,4)
    • bb 之间(550 至 1000)

我想使用 Spring data solr 实现的 Solr 查询是:

q=*:*&fq=(type:A AND aa:(1,2,3) AND ab:[2016-08-02 TO 2016-08-10]) OR (type:B AND ba:(2,3,4) AND bb:[550 TO 1000])
Run Code Online (Sandbox Code Playgroud)

我不确定如何对某种类型的过滤器的多个子句进行分组,然后使用 OR 运算符。

提前致谢。

spring solr spring-data-solr

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

反应式 spring-data-solr 存储库

我找到了一篇关于 spring-data 反应式存储库的博客文章。有人提到,它目前支持 MongoDB、Apache Cassandra 和 Redis。

我们将在我们的反应式(基于 vert'x)架构中使用 spring-data-solr 存储库。

是否有可能在这种类型的存储库中轻松获得反应式支持?实施自己的反应式 solr 存储库需要多少努力?

java spring solr spring-data-solr project-reactor

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

如何使用spring-data-solr返回空间搜索中的距离和分数

我正在使用带有Solr 4.4.0和Spring 3.2.4.RELEASE的spring-data-solr 1.0.0.RELEASE编写基于Spring MVC的Search API.

我能够运行基本查询但无法找到任何好的示例如何返回得分和距离:结果中的geodist().

我知道我可以使用查询来获取Solr的结果

http://localhost:8983/solr/events/select?q=*:*&spatial=true&pt=51.435872%2C-0.427529&sfield=position&d=20&facet=true&facet.mincount=1&facet.limit=-1&facet.field=categoryIds&fl=score,*,distance:geodist()&sort=geodist()+asc
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用spring-data-solr从Solr返回得分和距离属性.我试过以下代码

FacetQuery search = new SimpleFacetQuery();

Criteria conditions;// = new Criteria();
if(StringUtils.isNotBlank(searchCriteria.getSearchString()))
        conditions = new Criteria(EventDocument.FIELD_EVENT).contains(searchCriteria.getSearchString());

if(searchCriteria.isLocationKnown()){
        conditions.and(new Criteria(EventDocument.FIELD_POSITION).within(new GeoLocation(searchCriteria.getLatitude(), searchCriteria.getLongitude()), new Distance(searchCriteria.getDistance(), Distance.Unit.MILES)));
        conditions.and(new Criteria(CommonParams.FL).is("score,distance:geodist(),*"));
    } else{
        conditions.and(new Criteria(CommonParams.FL).is("score,*"));
    }

search.addCriteria(conditions);
FacetPage page = solrTemplate.queryForFacetPage(search, EventDocument.class);
Run Code Online (Sandbox Code Playgroud)

但得到以下例外:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.data.solr.UncategorizedSolrException: undefined field fl; nested exception is org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: undefined field fl
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

org.springframework.data.solr.UncategorizedSolrException: undefined field fl; nested exception is org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: …
Run Code Online (Sandbox Code Playgroud)

java solr spring-mvc solrj spring-data-solr

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

Spring solr动态场anotation

我正在尝试执行一个查询,就像从文档中检索一个特定字段,我在执行查询时没有获取运行时错误,但我没有得到我应该从查询中检索的3个字段,只是日期和原点,但没有变量,应该返回所有变量的变量都是空值.我如何选择我只想在查询中检索的字段?

目前我的查询如下所示:

  @Query(value = "id:?0", fields = {"?1","date","origin"})
   List<Data> getRecord(String id,String field);
Run Code Online (Sandbox Code Playgroud)

java solrj spring-data-solr

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