我应该在Elasticsearch中使用MySQL的主键作为ID吗?

时间:2016-02-02 06:42:09

标签: mysql database search elasticsearch

我正在使用MySQL来存储移动应用后端服务器的数据。现在我想添加搜索功能,并且一直在探索Elasticsearch,特别是AWS ES。我的问题是关于Elasticsearch中使用的数据模型。我在MySQL中有下表

CREATE TABLE User
(
Id int NOT NULL AUTO_INCREMENT,
Name varchar(100) NOT NULL,
PRIMARY KEY (Id)
);

现在我希望能够搜索User.Name。我的问题是,将ES中的_id与MySQL中的User.id保持一致是个好主意,以便可以轻松地在(MySQL和ES)管理任何后续更新。

$ curl -XPUT 'http://localhost:9200/index/user/1' -d '{
    "name" : "Roger Federer",
    "post_date" : "2009-11-15T14:12:12",
}'

2 个答案:

答案 0 :(得分:1)

从ES 2.0开始,您free to use拥有自己的ID而不会降低性能。情况不是in pre-2.0 releases

但是,您选择的ID类型将为impact on indexing performance。您的MySQL主键是一个顺序整数,根据后一个链接,它执行正常,所以您不应该遇到任何问题。根据相同的链接,如果你想提高性能,你可以使用你的主键,但是为了创建ES id,将其填零,以便ID: 1的MySQL记录具有ES _id: 000000001

此外,正如您所说,保持相同的ID可以让您更好地管理两个数据源之间的更新和同步。

答案 1 :(得分:1)

这尤其是一项实施决定。所以你必须决定它。在我的用例中,为了管理文档,我使用同一个ID保持相同。情况是,如果您的ID在ES文档中没有意义,您甚至可以不指定,ES将为您管理。