elasticsearch,sdk,kuzzle,Javascript,elasticsearch,Sdk,Kuzzle" /> elasticsearch,sdk,kuzzle,Javascript,elasticsearch,Sdk,Kuzzle" />

Javascript 我是否必须指定映射才能在Kuzzle中使用document.search控制器?

Javascript 我是否必须指定映射才能在Kuzzle中使用document.search控制器?,javascript,elasticsearch,sdk,kuzzle,Javascript,elasticsearch,Sdk,Kuzzle,我使用Kuzzle是为了构建一个简单的类似slack的应用程序。我有一个只包含其他文档ID的文档的简单集合。 我想从这个集合中查询一个id列表,但在响应中遇到了一个空的hits数组,无论我在查询中尝试了什么id值。它让我了解了Elasticsearch查询语法和映射,我发现我需要指定一个映射 在未指定映射的情况下创建集合时,document.search: 如果给定“查询”正文属性(如以下内容),则返回空的命中数组: {"query": {"terms": {"id": <ids arr

我使用Kuzzle是为了构建一个简单的类似slack的应用程序。我有一个只包含其他文档ID的文档的简单集合。 我想从这个集合中查询一个id列表,但在响应中遇到了一个空的hits数组,无论我在查询中尝试了什么id值。它让我了解了Elasticsearch查询语法和映射,我发现我需要指定一个映射

在未指定映射的情况下创建集合时,document.search:

  • 如果给定“查询”正文属性(如以下内容),则返回空的命中数组:

    {"query": {"terms": {"id": <ids array>}}}
    
  • 并为“聚合”返回一个空的存储桶列表,如下所示:

    "aggregations": {
        "groupById": {
            "terms": {
                "field": "id"
            }
        }
    }
    
我不明白这背后发生了什么。只有一个案例被视为错误是否正常?我正在处理查询部分,不清楚错误是否来自ids数组的内容

在“id”上添加一个带有“keyword”类型的简单映射可以使所有案例都按预期工作,但我在Elasticsearch中了解到了动态映射。有没有办法使用它们?或者是否有其他解决方案可用于查询文档中的(唯一)参数

我正在使用kuzzle sdk v7.1.4


非常感谢

Elasticsearch映射是告诉底层引擎如何索引文档字段的一种方法

例如,字段的索引方式与字段不同,您将无法进行相同类型的查询

关键字
字段按“原样”编制索引,所以您可以(使用)对精确的术语进行非常快速的搜索,但
文本
字段使用各种方法进行分析,以便能够执行一个示例

如果字段没有声明的映射,Elasticsearch将无法在任何查询中访问它

您可以阅读我们的网站以了解更多信息

关于,默认情况下,此策略设置为
false
,这意味着ES不会推断新引入的字段类型

我们选择使用此默认值是因为您无法修改字段的类型,因此最好自己定义它,而不是使用ES推断的精度较差的类型

您可以为整个映射更改此策略,但也可以仅为嵌套对象更改此策略(例如,这被视为最佳做法)

然后,如果创建以下文档:

{
  "id": "your-unique-uuid",
  "name": "aschen",
  "metadata": {
    "avatar": "http://url.com"
  }
}
  • id
    字段已声明为
    关键字
    ,您可以进行查询 在这个领域

  • name
    字段未声明,动态策略为
    false
    因此,您不能在此字段上进行查询

  • metadata.avatar
    字段未声明,但动态策略 因为这个嵌套对象是
    true
    ,所以ES将为 此字段,可在此字段进行查询

最后一件事,您正在文档中使用
id
字段,但Elasticsearch已经为每个文档生成了唯一标识符(
\u id
),因此您可能希望使用此字段


我是Kuzzle core的开发者

谢谢!遗漏了映射动态策略:')最后一件事,我的查询在没有提供映射的情况下搜索“id”字段时不会引发错误,而是返回空的hits数组,这是预期的行为吗?是的,这是Elasticsearch默认行为。但是,如果你试图在这个字段上排序,我想你会得到一个错误
{
  "dynamic": "false",
  "properties": {
    "id": { "type": "keyword" },
     "metadata": {
       "dynamic": "true",
       "properties": {
         // field types will be automatically inferred in the "metadata" object
       }
     }
  }
}
{
  "id": "your-unique-uuid",
  "name": "aschen",
  "metadata": {
    "avatar": "http://url.com"
  }
}