我正在开发一个计划将elasticsearch用作数据存储库的系统.我正在尝试选择开发我的应用程序的最佳方法,该应用程序可以索引和查询elasticsearch中的数据.我拥有的系统建立在Spring框架之上.
使用Spring-data-elasticsearch(https://github.com/spring-projects/spring-data-elasticsearch)是一个不错的选择吗?
或者使用elasticsearch核心库本身是一个不错的选择?
我需要处理嵌套数据(内部对象),但Spring-data-elasticsearch最近似乎没有操作.
我希望我能找到问题的解决方案.提前致谢.
java spring frameworks elasticsearch spring-data-elasticsearch
假设我有这个给定的数据
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "GEORGE",
"favorite_cars" : [ "honda","Hyundae" ]
}
Run Code Online (Sandbox Code Playgroud)
每当我在搜索最喜欢的汽车是丰田的人时查询这些数据,它就会返回这些数据
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}
Run Code Online (Sandbox Code Playgroud)
结果是两个名称为ABC的记录.如何仅选择不同的文档?我想得到的结果只是这个
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}
Run Code Online (Sandbox Code Playgroud)
这是我的查询
{
"fuzzy_like_this_field" : {
"favorite_cars" : {
"like_text" : "toyota",
"max_query_terms" : 12
}
}
} …Run Code Online (Sandbox Code Playgroud) java aggregate nosql elasticsearch spring-data-elasticsearch
我正处于使用Spring启动和AWS弹性搜索服务的情况.AWS Elasticsearch服务,仅提供REST接口.
Elasticsearch Rest Client在这里.
简单地说,是否可以将REST客户端与Spring Data Elasticsearch一起使用?
换句话说,Spring Data Elasticsearch是否适用于Elasticsearch Rest客户端?
Spring Data Elasticsearch非常易于使用,模板提供了我所需要的大部分功能.使用Elasicsearch Rest客户端,我必须自己实现所有功能.
java amazon-web-services elasticsearch spring-boot spring-data-elasticsearch
我刚刚下载了弹性搜索分发并运行它.
curl 'localhost:9200'
{
"status" : 200,
"name" : "cbs",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.4.1",
"build_hash" : "89d3241d670db65f994242c8e8383b169779e2d4",
"build_timestamp" : "2014-11-26T15:49:29Z",
"build_snapshot" : false,
"lucene_version" : "4.10.2"
},
"tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)
我试图使用spring-data访问它.在应用程序上下文中(根据spring数据文档)在xml命名空间中添加了以下行:
<elasticsearch:repositories base-package="com.cbs" />
<elasticsearch:transport-client id="client" cluster-nodes="127.0.0.1:9300" cluster-name="elasticsearch" />
<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这是实体和存储库代码:
@org.springframework.data.elasticsearch.annotations.Document(indexName = "product", type = "product", shards = 1, replicas = 0, indexStoreType = "memory", refreshInterval = "-1")
public class Product {
@Id …Run Code Online (Sandbox Code Playgroud) 我使用Spring Boot 2和Spring Data,Spring-Data-Elastisearch和Spring-data-Redis(用于http会话).当我启动应用程序.我收到了
2017-10-29 17:38:33.376 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.451 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.461 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.768 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode! …Run Code Online (Sandbox Code Playgroud) spring-data spring-data-jpa spring-data-redis spring-boot spring-data-elasticsearch
我正在使用spring-data-elasticsearch,一开始一切正常.
@Document( type = "products", indexName = "empty" )
public class Product
{
...
}
public interface ProductRepository extends ElasticsearchRepository<Product, String>
{
...
}
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我可以搜索产品.
@Autowired
private ProductRepository repository;
...
repository.findByIdentifier( "xxx" ).getCategory() );
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是 - 我在不同的索引中使用相同的Elasticsearch类型,我想对所有查询使用相同的文档.我可以通过池处理更多连接 - 但我不知道如何实现这一点.
我希望有这样的东西:
ProductRepository customerRepo = ElasticsearchPool.getRepoByCustomer("abc", ProductRepository.class);
repository.findByIdentifier( "xxx" ).getCategory();
Run Code Online (Sandbox Code Playgroud)
是否可以在运行时使用不同的索引创建存储库?
非常感谢Marcel
java elasticsearch spring-data spring-boot spring-data-elasticsearch
我在pom.xml中有一个带有Spring Data Elasticsearch插件的Spring Boot应用程序.我创建了一个文档类,我想索引:
@Document(indexName = "operations", type = "operation")
public class OperationDocument {
@Id
private Long id;
@Field(
type = FieldType.String,
index = FieldIndex.analyzed,
searchAnalyzer = "standard",
indexAnalyzer = "standard",
store = true
)
private String operationName;
@Field(
type = FieldType.Date,
index = FieldIndex.not_analyzed,
store = true,
format = DateFormat.custom, pattern = "dd.MM.yyyy hh:mm"
)
private Date dateUp;
@Field(
type = FieldType.String,
index = FieldIndex.not_analyzed,
store = false
)
private String someTransientData;
@Field(type = FieldType.Nested)
private List<Sector> sectors;
//Getter …Run Code Online (Sandbox Code Playgroud) 我正在使用 spring-data-elasticsearch 3.2.3 中的 ReactiveElasticsearchClient 和 spring-boot 2.2.0。当升级到 spring-boot 2.2.2 时,我得到了 org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144。
它被指示修复使用 spring.codec.max-in-memory-size 但我仍然遇到相同的异常。
咆哮整个例外:
org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoCollect] :
reactor.core.publisher.Flux.collect(Flux.java:3273)
org.springframework.core.io.buffer.DataBufferUtils.join(DataBufferUtils.java:553)
Error has been observed at the following site(s):
|_ Flux.collect ? at org.springframework.core.io.buffer.DataBufferUtils.join(DataBufferUtils.java:553)
|_ Mono.filter ? at org.springframework.core.io.buffer.DataBufferUtils.join(DataBufferUtils.java:554)
|_ Mono.map ? at org.springframework.core.io.buffer.DataBufferUtils.join(DataBufferUtils.java:555)
|_ Mono.map ? at org.springframework.core.codec.AbstractDataBufferDecoder.decodeToMono(AbstractDataBufferDecoder.java:96)
|_ checkpoint ? Body from …Run Code Online (Sandbox Code Playgroud) 我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,java代码如下:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery()).withSearchType(SearchType.COUNT)
.addAggregation(new MinBuilder("min_createDate").field("createDate"))
.build();
List<Entity> list = template.queryForList(searchQuery, Entity.class);
Run Code Online (Sandbox Code Playgroud)
虽然我怎么知道发送到elasticssearch服务器的原始http查询?如何启用日志记录,我尝试添加log4j,但似乎spring-data-elasticsearch不记录查询.
我正在使用spring-data-elasticsearch和elasticsearch来查询文档.我想对嵌套文档进行嵌套查询.
我在java中有这个:
@Document(indexName = "as", type = "a", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
class A {
@Id
private String Id;
@Field(type = String, index = analyzed, store = true)
private String field1;
// ... Many more Fields.
@NestedField(type = FieldType.Object, index = analyzed, store = true, dotSuffix = "accounts")
private List<B> bs;
// ... getters and setters
}
Run Code Online (Sandbox Code Playgroud)
和
class B { // some normal pojo }
Run Code Online (Sandbox Code Playgroud)
当我让spring-data进行映射时,我得到:
"a": {
"properties": {
"bs": …Run Code Online (Sandbox Code Playgroud) java ×5
spring-data ×4
spring-boot ×3
spring ×2
aggregate ×1
frameworks ×1
nosql ×1
spring-mvc ×1