我的索引Map如下:
{
"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表示 “启用的设置(只能应用于顶层Map定义和对象字段)会导致Elasticsearch完全跳过对字段内容的解析。JSON仍然可以从_source字段检索,但不能以任何其他方式搜索或存储”。因此,如果只在非索引部分发生更改,则不重新索引文档似乎是合乎逻辑的,但我不确定
1条答案
按热度按时间cwdobuhd1#
Elasticsearch文档(Lucene Segments)是不可变的,所以你在文档中所做的每一个改变都将删除该文档并创建一个新文档。
Lucene的索引由段组成,每个段包含索引中所有文档的一个子集,并且本身是一个完整的可搜索索引,在该子集上。当文档被写入索引时,新的段被创建并刷新到目录存储。段是不可变的;更新和删除只能创建新的段,而不能修改现有的段。2随着时间的推移,写入程序会将多组较小的段合并成单个较大的段,以便维护一个能够有效搜索的索引,并回收被删除(和更新)的文档留下的死空间。
当设置enable:false时,您只是在避免字段内容出现在可搜索的结构中,但数据仍然存在于Lucene中。
您可以在此处看到类似的答案:
Partial update on field that is not indexed