我通过elasticsearch创建了一个表并与cassandra同步:
@protocol YVTableViewDelegate <UITableViewDelegate>
@required
- (UITableViewCell *)tableView:(SKSTableView *)tableView cellForSubRowAtIndexPath:(NSIndexPath *)indexPath;
@end
当我更改表格推文并添加电子邮件列时:
ALTER TABLE tweet ADD email varchar;
```
_id | message | postDate | user
-----+--------------------------------------------+-------------------------------------+------------
2 | ['Another tweet, will it be indexed?'] | ['2009-11-15 14:12:12.000000+0000'] | ['kimchy']
1 | ['Trying out Elassandra, so far so good?'] | ['2009-11-15 13:12:00.000000+0000'] | ['kimchy']
``` 该电子邮件已添加,但显示为 null 。
但是当我查询elasticsearch它不同步时:
_id | email | message | postDate | user
-----+-------+--------------------------------------------+-------------------------------------+------------
2 | null | ['Another tweet, will it be indexed?'] | ['2009-11-15 14:12:12.000000+0000'] | ['kimchy']
1 | null | ['Trying out Elassandra, so far so good?'] | ['2009-11-15 13:12:00.000000+0000'] | ['kimchy']
问题是如何将表格的更改从cassandra同步到elasticsearch?
答案 0 :(得分:0)
这是一篇旧帖子,但我会回答,以防有人找到它。
在Elassandra中,当您创建一个cassandra表或列时,它不会被elastisearch自动索引。您需要创建或更新映射:
curl -XPUT "http://localhost:9200/twitter/" -d '{
"settings" : { "keyspace" : "twitter" } },
"mappings" : {
"tweet" : {
"properties" : {
"email" : { "type" : "string", "index" : "not_analyzed" },
}
}
}
}
现在,elasticsearch索引包含一个新的email
字段。使用CQL插入的任何新电子邮件都将自动编入索引,并在一秒钟内可供搜索。
但值得注意的是,在映射更新之前添加的电子邮件条目尚不可搜索。必须使用nodetool来重建包含旧数据的索引:
nodetool flush tweeter
nodetool rebuild_index --threads 4 tweeter tweet elastic_tweet_idx