【问题标题】:Does non-indexed field update triggers reindexing in elasticsearch8?非索引字段更新是否会触发 elasticsearch8 中的重新索引?
【发布时间】:2022-11-29 10:07:07
【问题描述】:

我的索引映射如下:

{
        "mappings": {
            "dynamic": False,
            "properties": {
                "query_str": {"type": "text", "index": False},
                "search_results": {
                    "type": "object", 
                    "enabled": False
                },
                "query_embedding": {
                    "type": "dense_vector",
                    "dims": 768,
                },
               
        }
    }

字段 search_result 已禁用。实际搜索只能通过query_embedding进行,其他字段只是不可搜索的数据。

如果我更新现有文档中的 search_result 字段,它会触发重建索引吗

docs“启用的设置只能应用于顶级映射定义和对象字段,导致 Elasticsearch 完全跳过对字段内容的解析。JSON 仍然可以从 _source 字段中检索,但不是可搜索或以任何其他方式存储”.因此,如果仅在非索引部分发生更改,则不重新索引文档似乎是合乎逻辑的,但我不确定

【问题讨论】:

    标签: elasticsearch search full-text-search


    【解决方案1】:

    Elasticsearch 文档(Lucene Segments)是不可变的,因此您在文档中所做的每一次更改都将删除该文档并创建一个新文档。这是 Lucene 的行为:

    Lucene的索引由段组成,每个段包含一个 索引中所有文档的子集,并且是一个完整的可搜索的 索引本身,在那个子集上。由于文件被写入 索引,新段被创建并刷新到目录存储。 段是不可变的;更新和删除可能只会创建新的 段,不要修改现有的段。随着时间的推移,作家合并 为了 维护一个有效搜索和回收死的索引 删除(和更新)文档留下的空间。

    当您设置 enable:false 时,您只是在避免在可搜索结构中包含字段内容,但数据仍然存在于 Lucene 中。

    你可以在这里看到类似的答案:

    Partial update on field that is not indexed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多