java – Spring solr动态字段anotation
作者:互联网
我正在尝试执行一个查询,就像从文档中检索一个特定字段,我在执行查询时没有获取运行时错误,但我没有得到我应该从查询中检索的3个字段,只是日期和原点,但没有变量,应该返回所有变量的变量都是空值.
我如何选择我只想在查询中检索的字段?
目前我的查询如下所示:
@Query(value = "id:?0", fields = {"?1","date","origin"})
List<Data> getRecord(String id,String field);
解决方法:
介绍
阅读你的评论我看到有一些关于什么是SolrJ和什么的混淆
Spring Data for Apache Solr.
SolrJ是Solr客户端(我个人也会添加标准和官方客户端).
SolrJ is an API that makes it easy for Java applications to talk to
Solr. SolrJ hides a lot of the details of connecting to Solr and
allows your application to interact with Solr with simple high-level
methods.
Apache Solr的Spring Data是更大的框架Spring Data的一部分,它提供了从Spring应用程序到Apache Solr Search Server的配置和访问(在内部与SolrJ谈论它使用SolrJ).
到目前为止,Solr Spring Data ver. 1.2.0.RELEASE依赖于SolrJ 4.7.2,它可能与Solr 6.2.0不兼容(当然,如果您使用的是SolrCloud).
鉴于此适当的介绍,我建议将Solr实例和SolrJ客户端保持在同一版本(或至少在相同的主要版本上).
所以对于Solr v.6.2.1,你应该使用SolrJ 6.2.1,但遗憾的是最新的Solr Spring Data版本是2.1.3.RELEASE(内部依赖于SolrJ 5.5.0).
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
</dependencies>
你的问题
关于您没有收到所需字段列表的事实,只是Solr Data不支持字段列表的占位符.
我建议扩展你的Repository类,而不是与Solr Spring Data斗争,创建一个新的RepositoryImpl,使用简单而简单的SolrJ客户端添加自定义搜索.
@Component
public class ProductsRepositoryImpl implements ProductsRepositoryCustom {
@Autowired
private SolrServer solrServer;
public ProductsRepositoryImpl() {};
public ProductsRepositoryImpl(SolrServer solrServer) {
this.solrServer = solrServer;
}
public List<Map<String, Object>> findFields(String id, List<String> fields)
{
SolrQuery solrQuery = new SolrQuery("id:" + id);
solrQuery.setFields(fields.toArray(new String[0]));
try {
QueryResponse response = this.solrServer.query(solrQuery);
return response.getResults()
.stream()
.map(d ->
{
return d.entrySet()
.stream()
.filter(e -> fields.contains(e.getKey()))
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
}).collect(Collectors.toList());
} catch (SolrServerException e) {
// TODO Auto-generated catch block
}
return Collections.emptyList();
}
}
标签:java,solrj,spring-data-solr 来源: https://codeday.me/bug/20190611/1217432.html