如何使用elasticsearch类型?

时间:2016-04-05 05:35:00

标签: elasticsearch

注意:如果您通过评论告诉我为什么您认为这是一个糟糕的问题,将非常感谢。请不要只是投票而不是为什么......

我们知道在索引下有一个名为type的概念。但我不知道为什么我们需要它。

首先我认为我们用它来组织数据。就像我们有如下索引:

 DisplayMetrics displaymetrics = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
 screenHight = displaymetrics.heightPixels;
 screenWidth = displaymetrics.widthPixels;

  @SuppressLint("NewApi") @Override
  public boolean onTouch(View view, MotionEvent event) {


       float newX, newY;

    switch (event.getActionMasked()) {
      case MotionEvent.ACTION_DOWN:

        dX = view.getX() - event.getRawX();
        dY = view.getY() - event.getRawY();
        lastAction = MotionEvent.ACTION_DOWN;
        break;

      case MotionEvent.ACTION_MOVE:

          newX = event.getRawX() + dX;
          newY = event.getRawY() + dY;

      // check if the view out of screen
          if ((newX <= 0 || newX >= screenWidth-view.getWidth()) || (newY <= 0 || newY >= screenHight-view.getHeight()))
          {
              lastAction = MotionEvent.ACTION_MOVE;
              break;      
          }

        view.setX(newX);
        view.setY(newY);

        lastAction = MotionEvent.ACTION_MOVE;

        break;

      case MotionEvent.ACTION_UP:
        if (lastAction == MotionEvent.ACTION_DOWN)
          Toast.makeText(DraggableView.this, "Clicked!", Toast.LENGTH_SHORT).show();
        break;

      default:
        return false;
    }
    return true;
  }

但在上述情况下,我们总是可以消除类型,将其移动到json体中,如:

curl -XPOST 'localhost:9200/customer/USA/_bulk?pretty' -d '
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'

通过这种方式,我们总是可以添加一个字段来替换类型。

然后我认为这可能与性能有关。我想如果你将数据拆分成不同的类型,那么每种类型下的数据都会减少。因此,查询每种类型的性能应该更好。但它也不是那样的。

elasticsearch索引的性能与分片有关。因此,即使您将数据拆分为不同的类型,它仍然存储在相同的分片集下。

那为什么我们需要打字?

2 个答案:

答案 0 :(得分:1)

首先,虽然弹性搜索确定运行时字段的类型,但是一旦它将特定类型分配给字段,它总是期望该字段具有相同类型的值。因此,如果需要存储不同类型的数据,则需要多种类型。其次,它允许在单个索引中存储具有差异映射的多个类型。此外,如果您确定其架构,则可以更轻松地查询特定类型。

答案 1 :(得分:1)

根据我对ES的理解,类型是我们可以在关系数据库中与表概念相关的东西。其中数据库可以说是一组相关表。同样在ES中,index是一组相关类型,索引中的每个类型都包含共享一些公共属性的文档。

在您的示例中,对于索引说客户,我们可以拥有来自不同国家/地区的不同员工,例如美国,印度,英国等。来自每个国家/地区的客户记录可以分组在不同的类型下,它将被组织。当我们为特定国家/地区的客户运行搜索查询时,我们只需要在类型USA上运行该查询。我们不需要在整个索引中查找以获取来自美国的客户数据。

另一个例子 :我们假设您运行一个博客平台并将所有数据存储在一个索引中。在此索引中,您可以为用户数据定义类型,为博客数据定义另一种类型,为评论数据定义另一种类型。因此,我们在逻辑上将数据组织成不同的类型,并在我们进行搜索时查找所需的类型。

因此,通常,type是索引的逻辑类别/分区,其语义完全取决于您。它可以定义为具有一组公共字段的文档。

您可以参阅此帖子以更好地理解https://www.elastic.co/blog/index-vs-type