database - 将ID存储在ElasticSearch索引的_type字段中是个好主意吗?

标签 database elasticsearch

我刚刚开始一个家庭项目,并且打算使用Elastic作为数据库。我目前正处于设计阶段,并开始考虑这一点。

假设我有属于不同人的文章。 Person对象具有ID,并且Article对象也具有ID属性。
显然会有一个保存Article文档的索引。使用这些文档的_type字段存储一个Person的ID(这表示该文章属于哪个Person)似乎是一个好主意。
但是,我从未见过有人使用此字段来进行此类操作。

在元数据中搜索比在_source数据中搜索更快吗?我的意思是,如果我不使用_type来存储ID,则Article对象将具有OwnerID字段或类似的字段。

举一个实际的例子,假设我要查找所有与政治相关的文章,并以任何顺序由XY撰写。

第一个版本(请注意XY位于标题中):

GET /my_index/XY/_search
{
    "query" : {
        "constant_score" : { 
            "filter" : {
                "term" : { 
                    "genre" : "politics"
                }
            }
        }
    }
}

第二版:
GET /my_index/article/_search
{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "must" : [
                 { "term" : {"ownerID" : XY}}, 
                 { "term" : {"genre" : "politics"}} 
              ]
           }
         }
      }
   }
}

他们中的任何一个都比另一个更好吗?
我很乐观,即使有5个人打算使用这个网站,即使有5000人,我也希望做出一个好的设计。
如果索引中有5000种不同类型,这有关系吗?

最佳答案

是的,这确实很重要,这就是为什么要使用第二个版本的原因。

如果您决定使用人员ID作为文章的类型,并且有5000个人,那么my_index索引最终将具有5000种映射类型,并且所有映射类型都具有相同的字段。如果您想在某个时候在文章中添加一个新字段,则必须修改所有5000种映射类型。这可能就是为什么您从未见过有人使用过这种类型的原因。

与第二个版本一样,为文章提供一个索引和一种映射类型,然后为一个ownerID字段,将更加简单。

关于database - 将ID存储在ElasticSearch索引的_type字段中是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257301/

相关文章:

java - Android SQLiteDatabase - 从数据库中删除值后 ListView 和数据库 ID 不匹配

MySQL 特殊排序

docker - 无法使用docker在Apple Mac芯片M1上启动elasticsearch

ruby-on-rails - 模型中定义的Rails Elasticsearch分析器映射未在Elasticsearch中报告

database - postgresql 中带有字母(非数字)的列的数据类型

jquery - 将数据库中的值显示到 HTML 输入标签中

ElasticSearch aggs 仅返回 10 个桶

elasticsearch - Elastic Search 有查询管理器吗?

elasticsearch - Kibana Elasticsearch 6.4基本安全性

php - EasyPHP - 将 WordPress 实时带到本地主机