在将字符串字段Map为两者时,我有一个关于权衡/性能考虑的问题要牢记在心 text
以及 keyword
而这只是其中之一。
我有一个用例,将大约25-30个字符串字段同时Map为文本和关键字是一个不错的选择,但是如果有一些重要的性能考虑,那么我会深入并将它们Map到搜索最多的类型。
我在网上找不到太多关于这个的信息。所以在这里问。
elasticsearch 7.10版谢谢!
在将字符串字段Map为两者时,我有一个关于权衡/性能考虑的问题要牢记在心 text
以及 keyword
而这只是其中之一。
我有一个用例,将大约25-30个字符串字段同时Map为文本和关键字是一个不错的选择,但是如果有一些重要的性能考虑,那么我会深入并将它们Map到搜索最多的类型。
我在网上找不到太多关于这个的信息。所以在这里问。
elasticsearch 7.10版谢谢!
2条答案
按热度按时间kcrjzv8t1#
搜索和索引的性能取决于字符串字段的大小,如果您有一个较大的字符串并将其Map为关键字,则会对索引和搜索性能产生重大影响。如果您决定将字段同时Map为文本和关键字,请确保在关键字中设置ignore\ u,因为lucene的术语字节长度限制是32766,这意味着elasticsearch不会将大于此大小的字符串作为关键字进行索引。
另外,将用于字符串字段的分析器类型也会产生影响。
aydmsdu92#
es提供的默认Map,将字段Map为
text
以及keyword
通常这样做是因为它很方便,并且允许在不同的上下文中使用该字段,而不必过多地考虑它。这也是一个引导新项目的好方法,在项目后期之前不要太担心这个方面。但是,如果您对Map和集群的性能非常认真,那么您应该始终尽可能多地考虑为什么要以某种方式Map字段。
以下(非详尽)列表中有一些基本规则(但您的里程数可能总是有所不同):
通常用于精确搜索的ID、代码、键等可以Map为
keyword
仅(和/或wildcard
取决于您的搜索用例)。如果您有更接近自然语言的较长文本片段,您可能希望在其上运行全文搜索,通常最好将它们Map为
text
.上一条规则的推论是,如果您知道永远不想在某个字段上运行全文搜索,则不要将其Map为
text
因为在分析过程中,与索引文本字段相关的开销是不可忽略的。...
如上所述,显然上面的列表并不详尽,但它给了您一些提示。底线是你需要认真考虑你的数据以及你想用它做什么。一旦你知道了你需要支持的用例,你就会知道如何Map你的域。如果没有理由,我永远不会接受默认的文本/关键字Map。