我们正在比较那些搜索解决方案,并开始想知道为什么一个人需要一个架构而另一个不需要架构。什么是权衡?是因为一个像SQL一样,另一个就像架构配置意义上的NoSQL一样吗?
答案 0 :(得分:2)
ES的架构定义为templates和mappings。你不必使用它,但实际上你会。 Schema实际上是一件好事,如果你注意到一个声称纯粹无模式的数据库 - 就会有性能影响。
Schema是易于开发和采用与性能之间的权衡。它很容易读/写到无模式数据库,但它的性能会降低,特别是对于任何非平凡的查询。
答案 1 :(得分:2)
Elasticsearch肯定有一个架构。如果您认为没有,请尝试将日期索引到字段中,然后将int索引到同一字段中。甚至可以使用相同名称的不同类型(我认为ES 2.0现在不允许这样做。)
Elasticsearch所做的是简化模式的自动创建。这可能存在权衡,例如可能的错误类型检测,结果输出中单值或多值的字段,基于它们包含的元素数量(它们总是在掩盖下多值),依此类推。 Elasticsearch有一些方法可以解决这个问题,主要是通过定义Oleksii编写的一些模式元素和显式模式映射。
Solr还具有与Elasticsearch模式紧密匹配的无模式模式,直至将所有JSON存储为单个字段。当你启用它时,你会得到类似的好处和Elasticsearch的类似缺点。除了在Solr中,您可以更改自动类型策略的顺序和映射到字段类型之类的内容。在Elasticsearch(至少1.x)中,它是硬编码的。您可以在my presentation from 2014中看到 - 稍微过时 - 比较。
正如Slomo所说,他们都使用Lucene进行存储和大部分搜索。因此,核心引擎方法无法改变。