拥有所有领域的两者之间的差异使我望而却步.
如果我的文件有:
{"mydoc":
{"properties":
{"name":{"type":"string","store":"true"}},
{"number":{"type":"long","store":"false"}},
{"title":{"type":"string","include_in_all":"false","store":"true"}}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道_source是一个包含所有字段的字段.但_all也是如此?这是否意味着"名称"被保存了几次(两次?在_src和_all中),增加了文档占用的磁盘空间?
字段的"名称"是一次存储,_source是一次存储,_all是一次吗?关于"数字",他存储在所有,即使不在_source?
什么时候应该在我的查询中使用_source,什么时候_all?
我可以禁用"_all"的用例是什么,然后会拒绝哪些功能?
jav*_*nna 46
它与lucene中的索引字段和存储字段之间的差异几乎相同.
当您要搜索索引字段时,可以使用索引字段,同时存储要作为搜索结果返回的字段.
该_source字段用于存储最初发送到elasticsearch的整个源文档.它用作搜索结果,以便检索.你无法搜索它.实际上它是lucene中的存储字段而没有索引.
该_all字段用于索引来自组成文档的所有字段的所有内容.您可以搜索它但从不返回它,因为它已被索引但未存储在lucene中.
没有冗余,这两个字段用于不同的用例并存储在lucene索引中的不同位置.该_all字段成为我们称之为倒排索引的一部分,用于索引文本并能够对其执行全文搜索,而该_source字段仅作为lucene文档的一部分存储.
您永远不会_source在查询中使用该字段,只有在您返回结果时才会这样,因为这是elasticsearch默认返回的结果.有一些功能依赖于该_source字段,如果禁用它,则会丢失.其中之一是更新API.此外,如果禁用它,则需要记住store:yes在映射中配置要作为搜索结果返回的所有字段.我宁愿说不要禁用它,除非它困扰你,因为它在很多情况下真的很有帮助.另一个常见用例是当您需要重新索引数据时; 您可以从elasticsearch本身检索所有文档,然后将它们重新发送到另一个索引.
另一方面,该_all字段只是一个默认的catch all字段,当您只想搜索所有可用字段并且您不想在查询中全部指定它们时,可以使用该字段.它很方便,但我不会过多依赖它来制作,最好在不同的字段上运行更复杂的查询,每个字段具有不同的权重.如果你不使用它,你可能想要禁用它,这比_source我认为禁用它的影响要小.
| 归档时间: |
|
| 查看次数: |
13139 次 |
| 最近记录: |