- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 spring 数据 elasticsearch 保存一些数据。我需要为不同的客户端创建相同的索引。前任。如果我有索引 my-index,我需要为客户端 A 和 B 创建 my-index-A、my-index-B。但注释 @Document 仅适用于静态 indexName 或非线程安全的 spEL。
我的问题是,如果我手动创建索引和搜索(ElasticsearchTemplate.createIndex()、NativeSearchQueryBuilder().withIndices()),并删除实体类上的这一行。
@Document(indexName = "my-index-A")
@Id
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String aid;
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String userId;
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String entityId;
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String userName;
最佳答案
TL;博士
如果删除 @Document
,Spring-Data-Elasticseach 将不再起作用来自您类(class)的注释。
说明:
如果删除 @Document
从您的类(class)中,读取或写入(确定索引名称、类型和 id 时)时,几个 elasticsearch 操作将失败,如 ElasticsearchTemplate.getPersistentEntityFor(Class clazz)
严重依赖此注释。
解决方案
我已经成功使用一个带注释的类以不同的索引读/写 带有虚拟注释 @Document(indexName = "dummy", createIndex = false)
并使用 elasticsearchTemplate 为所有读/写操作显式设置索引名称。
证明
写作
ElasticEntity foo = new ElasticEntity();
foo.setAid("foo-a-id");
foo.setEntityId("foo-entity-id");
foo.setUserName("foo-user-name");
foo.setUserId("foo-user-id");
IndexQuery fooIdxQuery = new IndexQueryBuilder()
.withIndexName("idx-foo")
.withObject(foo)
.build();
String fooId = template.index(fooIdxQuery);
ElasticEntity bar = new ElasticEntity();
bar.setAid("bar-a-id");
bar.setEntityId("bar-entity-id");
bar.setUserName("bar-user-name");
bar.setUserId("bar-user-id");
IndexQuery barIdxQuery = new IndexQueryBuilder()
.withIndexName("idx-bar")
.withObject(bar)
.build();
String barId = template.index(barIdxQuery);
curl http://localhost:9200/idx-*/_search?pretty
给出:
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 10,
"successful" : 10,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_index" : "idx-bar",
"_type" : "elasticentity",
"_id" : "bar-a-id",
"_score" : 1.0,
"_source" : {
"aid" : "bar-a-id",
"userId" : "bar-user-id",
"entityId" : "bar-entity-id",
"userName" : "bar-user-name"
}
},
{
"_index" : "idx-foo",
"_type" : "elasticentity",
"_id" : "foo-a-id",
"_score" : 1.0,
"_source" : {
"aid" : "foo-a-id",
"userId" : "foo-user-id",
"entityId" : "foo-entity-id",
"userName" : "foo-user-name"
}
}
]
}
}
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery())
.withIndices("idx-foo", "idx-bar")
.build();
List<ElasticEntity> elasticEntities = template.queryForList(searchQuery, ElasticEntity.class);
logger.trace(elasticEntities.toString());
logger
在结果中产生完全填充的类:
[ElasticEntity(aid=bar-a-id, userId=bar-user-id, entityId=bar-entity-id, userName=bar-user-name), ElasticEntity(aid=foo-a-id, userId=foo-user-id, entityId=foo-entity-id, userName=foo-user-name)]
关于Spring 数据 Elasticsearch 动态更改 indexName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53389760/
这似乎是一种奇怪的行为,但以下代码会引发错误: public async Task RebuildIndex(string tableName, string indexName) { awa
我正在尝试使用 spring 数据 elasticsearch 保存一些数据。我需要为不同的客户端创建相同的索引。前任。如果我有索引 my-index,我需要为客户端 A 和 B 创建 my-inde
我正在尝试使用 sequelize.js addIndex 函数创建索引,索引已创建但未使用 indexName 选项中指定的名称。 我正在使用下面的代码 queryInterface.addIn
我是MySQL出身,习惯了常规的数据库表方案。我无法理解 IndexedDB 及其一些术语。我在文档中查找了这些定义: Key A data value by which stored values
是否可以动态(在运行时)指定 indexName对于每个 @Document ,例如,通过配置文件?或者是否可以制作@Document Spring 环境(开发,产品)依赖? 谢谢! 最佳答案 @Do
当我尝试drop时出现错误我的索引,或者当我尝试使用此类查询 SHOW INDEX 查看我的索引时或DROP INDEX 。 错误信息是: mysqlserver version for right
寻找使用内部 SpEL 的一些帮助 @Document注释引用: spring-data-elasticsearch:3.2.3.RELEASE和 Spring Boot 2.2.1 RELEASE
我是一名优秀的程序员,十分优秀!