使用django,haystack,angularjs和elasticsearch的最佳方法是什么?

时间:2014-04-09 23:58:26

标签: angularjs elasticsearch django-haystack

我正在使用django,haystack和Elasticsearch的堆栈构建搜索应用程序。但是我想添加angularjs。我的问题是:

对于angularjs来说,哪种替代方案更适合接收数据并在搜索应用中对其进行操作: 1.使用elasticsearch.js角度库直接查询elasticsearch中的数据 2.或者从干草堆中取出数据并开始玩它。因此,haystack是唯一可以与elasticsearch通信的人。

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能取决于你想保留东西的重量或重量。沉重的一开始可能会受到一点伤害,但可能会带来红利。如果你的目标是更短或更短期(玩具项目或原型),那么减少活动部件可能会更好。

如果你全力以赴:

ES< - > haystack< - > django< - >角

然后你获得了这些胜利:

  • 如果您决定不喜欢ES并希望使用solr
  • ,请换掉后端
  • 你可以使用haystack来抽象而不必编写血腥的原始查询
  • 如果你必须编写血腥的原始查询,haystack将比一些javascript spaghetti更好地包装它们
  • django本身很棒,如果你正在构建一些非常重要的东西,那么很多比完全位于浏览器中的东西更容易保持干净
  • 如果你从其他数据源拉出来,比如pordbms(普通的旧关系数据库管理系统;),那么django将再次降低头部爆炸力
  • 任何混合/修复不同的数据源将会更容易,并且可以隐藏在django服务器公开的任何路径之后
  • 由于所有繁重的工作都发生在服务器端,因此您的前端只能以最小的逻辑保持前端。这将使其更清洁,更易于维护,并使您必须返回给客户更轻的js有效负载。

因此,对于这种方法有很多话要说,但也有可能设置很多。如果你只需要一个由ES中的数据驱动的前端,那么你可以拥有一个直接查询ES的粗前端。有些人赢了:

  • angular可以毫不费力地发出你需要做的所有REST请求
  • ES可以接收所有这些REST请求
  • 他们都本身使用json所以它不像你必须处理序列化/反序列化头痛(并不是说它们在python中是巨大的,但它们在这里不是一个问题)
  • 但这可以削减两种方式,如果你有一个客户端无法轻易处理的非常复杂的查询,你可能会发现自己正在对原始javascript对象进行真正的肮脏操作,请注意
  • 配置,部署,测试,诅咒等的移动部件更少
  • 当你开始感受到这个堆栈的痛苦时,你至少可以删除查询而不必从头开始编写它们

我曾经在solr / haystack / django / backbone的一个堆栈上工作,关注和隐藏/抽象的分离非常好。我没有必要从头开始设置整个堆栈,这是一个现有的项目,我添加/重写了一些相当大的块。

我还使用过ES / node / angular stack,我从头开始设置绝大部分。设置......足够快。简单的事情很简单。当它变得更大时,我觉得在代码上施加足够的纪律以保持它真正干净是更难的。所以这是一种危险的情况,一旦查询似乎都有效,你就会慢慢退回,希望没有新的功能请求进来(他们总是这样做,让我们说实话)。但是,再次,如果这是一个小小的项目,或者你只是想尝试一些新的东西,或者你希望它快速而不是强大,这可能是开始的方式,然后你可以添加当你开始撞墙时其他部分。