gpt4 book ai didi

javascript - 我是否必须指定映射才能在 Kuzzle 中使用 document.search Controller ?

转载 作者:行者123 更新时间:2023-12-02 22:21:15 26 4
gpt4 key购买 nike

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

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

  • 如果给定“查询”正文属性,则返回一个空的命中数组,如下所示:
    {"query": {"terms": {"id": <ids array>}}}
  • 如果给出“排序”,则抛出以下内容:
    // {"sort": [{"id": {"order": "desc"}}]}
    Error: No mapping found for [id] in order to sort on
  • 并为“聚合”返回一个空桶列表,如下所示:
    "aggregations": {
    "groupById": {
    "terms": {
    "field": "id"
    }
    }
    }

  • 我不明白这背后发生了什么。只有一种情况被视为错误是否正常?我正在处理查询部分,并且不明显错误不是来自我的 ids 数组的内容!

    在带有“关键字”类型的“id”上添加一个简单的映射可以使所有情况都按预期工作,但我在 Elasticsearch 中阅读了动态映射。有没有办法使用它们?或者是否有另一种解决方案来查询我的文档中的(唯一)参数?

    我正在使用 kuzzle-sdk v7.1.4

    非常感谢!

    最佳答案

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

    例如,text字段将不会以与 keyword 相同的方式被索引字段,您将无法进行相同类型的查询。
    keyword字段按“原样”编入索引,因此您可以非常快速地搜索精确词(使用 term query )但 text使用各种方法分析字段以便能够做 fuzzy match query例如。

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

    您可以阅读我们的 Elasticsearch Cookbook了解更多信息。

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

    我们选择使用这个默认值是因为你不能修改字段的类型,所以最好自己定义它而不是 ES 推断出的准确度很差的类型。

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

    {
    "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"
    }
    }
  • id字段已声明为 keyword , 你可以查询
    在这个领域。
  • name字段未声明且动态策略为 false所以你不能在这个字段上进行查询。
  • metadata.avatar字段未声明,但动态策略
    这个嵌套对象是 true所以 ES 会添加一个 text输入
    这个字段,你可以在这个字段上进行查询。

  • 最后一件事,您正在使用 id您的文档中的字段,但 Elasticsearch 已经为每个文档生成了唯一标识符 ( _id ),因此您可能想改用它。

    我是 Kuzzle 核心的开发人员

    关于javascript - 我是否必须指定映射才能在 Kuzzle 中使用 document.search Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61648778/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com