从Cassandra到Elasticsearch SYNC - Elassandra的表格

时间:2016-10-12 11:29:36

标签: elasticsearch cassandra

我通过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?

1 个答案:

答案 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