Elasticsearch - 更新非索引字段

时间:2016-07-15 05:07:05

标签: mongodb search elasticsearch lucene updates

我需要在我的网站上提供搜索功能,我打算使用弹性搜索。

我有一个字段A保持不变,字段B每天改变一次,字段C每分钟改变一次。字段C未被索引(索引:" no"),而字段A和字段B被索引。

问题:每当我在弹性搜索中更改字段C(未编入索引)时,整个文档是否会更新(经过retrieve-change-reindex过程)?鉴于字段C的更新频率(其他选项可能是MongoDB文本搜索),Elastic Search是搜索字段A和B的不错选择吗?

2 个答案:

答案 0 :(得分:0)

MongoDB是一个数据库,而Elasticsearch是一个搜索引擎。 在操作这两个系统时,它真的有意义:而MongoDB完全是关于数据的灵活性,Elasticsearch有一些更谨慎和有序的方法。

Elasticsearch是文本搜索引擎库Lucene的包装器。示意性地,Lucene管理低级操作,作为索引和数据存储,而Elasticsearch带来一些数据抽象级别以适应JSON的可能性,HTTP REST API并简化了很多集群的构成。

聚合

Elasticsearch请求系统非常同质,在处理聚合时变得清晰。

MongoDB有一个专用的聚合管道,通过各个阶段[{" $ match":},{" $ group":},{" $ sort&#34 ;:},...]。 Elasticsearch聚合完全集成到请求中, 即使请求体通常比MongoDB管道更大,感觉也更清晰。

Elasticsearch与MongoDB的不同之处在于它不是无模式的。 除了单独的数据之外,可以在没有任何其他信息的情况下索引文档,但引擎会自动映射字段。索引文档时, Elasticsearch为其定义了默认映射。一旦定义了,就不可能(与MongoDB不同)索引具有相同类型但具有不同格式的另一个文档(例如,在前一个int字段中使用字符串)。

在使用默认映射索引的批量插入中,Mongodb将比弹性搜索更快。

MongoDB中的文档是可变的,而Elasticsearch中的文档是不可变的;我们无法改变它们。相反,如果我们需要更新现有文档,我们会重新索引或替换它。

Updating Document in ElasticSearch

Partial Updating Document in ElasticSearch

  

问题:每当我在弹性搜索中更改字段C(未编入索引)时,整个文档是否会更新(经过retrieve-change-reindex过程)?鉴于字段C的更新频率(其他选项可能是MongoDB文本搜索),Elastic Search是搜索字段A和B的不错选择吗?

考虑到更新频率和弹性搜索行为,需要在发生更改时重建文档。我建议去MongoDB

答案 1 :(得分:0)

如果您想提供搜索功能原因

,则可以使用ElasticSearch
  • 自由文本搜索
  • 空间搜索
  • 分组,聚合
  • Json格式
  • 基于Lucene最着名的索引库

如果某个字段未编入索引,那么您需要确定要存储的天气吗?好像一个字段既没有存储也没有索引没有意义,而elasticsearch doc是不可变的,这意味着如果你更新一个文档就会创建一个新文档并多次更新一个文件会导致同一个文档的多个版本,并且需要重新编制索引,尽管只有一个是活动的但对系统施加压力。如果您可以控制正在更新的文档的文档ID,那么您可以使用相同的文档ID和更新值一次又一次地插入