如何在像Elastic这样的搜索引擎中使用许多联接来管理SQL查询?

时间:2018-09-27 08:55:19

标签: elasticsearch sphinx

我有一个至少包含6个联接的SQL查询。该查询需要10分钟或更长时间才能执行。 现在我正在使用狮身人面像,我只是从该SQL查询中设置了一个源。 但是我在重新编制索引时遇到问题。

联接之一是对字典表的联接,该表实际上经常更新。 每次字典更新后,我都必须重新索引源。 但是我不想更新整个索引。

例如:

这是SQL查询:

  

选择m.col1,m.col2。来自MainTable m JOIN的m.col3,d.col1   支持表t1 JOIN支持表t2 JOIN支持表t3 JOIN   DictionaryTable d

当有人更新 DictionaryTable 时,我只希望更新索引的那部分,该部分取决于更新的行。

我的目标是服装的实时界面。 数据库的大小非常大。

如何使分析查询更快? 我应该使用搜索引擎并建立重新索引机制,还是应该使用更合适的技术?

1 个答案:

答案 0 :(得分:0)

像SPhinx实时索引这样的声音可能更合适。 http://sphinxsearch.com/docs/current.html#rt-indexes

您可以只发送某些文档的更新,而不必重建整个索引以更新一些文档。

但是您只能更新文档上的所有字段。不仅可以更新许多文档上的d.col1,还需要提供所有受影响文档的所有字段(和属性)的所有数据。

但是,您可以更新文档的选择属性,而无需触摸字段和/或其他属性。


另一种想法是代替一个大索引,将索引分解为几位-即“分片”索引。您甚至可以使用分布式索引使一次查询所有分片变得容易。 (即,对于仅显示一个索引的应用程序,您无需手动搜索单独的分片) http://sphinxsearch.com/files/tutorials/sphinx_config_tips_and_tricks.pdf

...这样可以滚动更新分片。即,不是一个“ 10分钟”查询,而是分为4个分片,并且更新量小得多。 (远程查询甚至可以用于分解成许多较小的查询,而不是一个2.5分钟的查询) http://sphinxsearch.com/docs/current.html#ranged-queries