我正在考虑使用 ElasticSearch 作为大型对象的搜索引擎。一台机器上大约有 5 亿个对象。到目前为止,Elasticsearch 是执行高级查询的一个很好的解决方案。但是有一个问题,我确实找到了在文档字段上创建二级索引的任何技术。在弹性搜索中是否有可能在列上创建像 MySQL 一样的次要索引?或者是否实施了任何其他技术来加速字段值的搜索?我使用的是单一服务器环境,每行/对象必须存储大约 300 个字段。目前我的数据库中有大约 5 亿个对象。
先谢谢了!
我正在考虑使用 ElasticSearch 作为大型对象的搜索引擎。一台机器上大约有 5 亿个对象。到目前为止,Elasticsearch 是执行高级查询的一个很好的解决方案。但是有一个问题,我确实找到了在文档字段上创建二级索引的任何技术。在弹性搜索中是否有可能在列上创建像 MySQL 一样的次要索引?或者是否实施了任何其他技术来加速字段值的搜索?我使用的是单一服务器环境,每行/对象必须存储大约 300 个字段。目前我的数据库中有大约 5 亿个对象。
先谢谢了!
我提前道歉,我不明白这个问题。Elasticsearch 本身是一种基于索引的技术(它构建在 Lucene 之上,Lucene 是基于索引的搜索的构建)。您将文档放入 Elasticsearch 中,这些文档上的各个字段都会被索引和搜索。您不必担心创建二级索引;默认情况下,这些字段将被索引(在大多数情况下)。
Elasticsearch 和 Solr 之间的区别之一是,在 Solr 中,您必须指定一个模式,定义文档上的字段以及该字段是否将被索引(可用于搜索)、存储(可作为搜索的结果) ) 或两者。Elasticsearch 不需要预先的模式,并且代替字段的特定映射,然后使用合理的默认值来代替。我相信核心字段(字符串、数字等..._)默认情况下会被索引,这意味着它们可以用于搜索。
现在,在您的情况下,您有一个包含很多字段的文档。您可能需要稍微调整映射以仅索引您知道可能搜索的字段。如果索引过多,则索引本身的大小会膨胀,并且不会像您只有您知道要搜索的字段的修剪索引那样快。此外,Lucene 将部分索引加载到内存中以真正实现快速搜索。使用臃肿的索引,您将无法在内存中保留尽可能多的内容,因此您的搜索将受到影响。您应该查看Mappings API和Core Types部分以获取有关如何执行此操作的更多信息。