【问题标题】:ElasticSearch: Secondary indecies on field values using Java-APIElasticSearch:使用 Java-API 的字段值的次要指标
【发布时间】:2013-06-14 14:28:01
【问题描述】:

我正在考虑使用 ElasticSearch 作为大型对象的搜索引擎。一台机器上大约有 5 亿个对象。到目前为止,Elasticsearch 是执行高级查询的一个很好的解决方案。但是有一个问题,我确实找到了在文档字段上创建二级索引的任何技术。在 elasticsearch 中是否有可能像在 MySQL 中那样在列上创建次要索引?或者是否有任何其他技术可以加速字段值的搜索?我使用的是单一服务器环境,每行/对象必须存储大约 300 个字段。目前我的数据库中有大约 5 亿个对象。

提前致谢!

【问题讨论】:

    标签: java performance indexing elasticsearch


    【解决方案1】:

    我提前道歉,我不明白这个问题。 Elasticsearch 本身是一种基于索引的技术(它构建在 Lucene 之上,Lucene 是基于索引的搜索的构建)。您将文档放入 Elasticsearch 中,这些文档上的各个字段都会被索引和搜索。您不必担心创建二级索引;默认情况下,这些字段将被索引(在大多数情况下)。

    Elasticsearch 和 Solr 之间的区别之一是,在 Solr 中,您必须指定一个模式,定义文档中的字段以及该字段是否将被索引(可用于搜索)、存储(作为结果可用)的搜索)或两者兼而有之。 Elasticsearch 不需要预先的模式,并且代替字段的特定映射,然后使用合理的默认值来代替。我相信核心字段(字符串、数字等..._)默认情况下已编入索引,这意味着它们可用于搜索。

    现在,在您的情况下,您有一个包含很多字段的文档。您可能需要稍微调整映射以仅索引您知道可能搜索的字段。如果索引过多,则索引本身的大小将膨胀,并且不会像您只有您知道要搜索的字段的修剪索引那样快。此外,Lucene 将部分索引加载到内存中以真正实现快速搜索。使用臃肿的索引,您将无法在内存中保留尽可能多的内容,因此您的搜索将受到影响。您应该查看Mappings APICore Types 部分以了解有关如何执行此操作的更多信息。

    【讨论】:

    • 这似乎是我打算做的正确想法。由于对索引(在弹性搜索上下文中)和关系数据库中的索引的混淆,我过度阅读了映射内容。 Settign for properties indexed = "analyzed" 似乎是正确的方法。但是我仍然陷入上述问题。经过一些研究后,我找到了一种更改映射的方法,但它似乎根本没有影响,我不知道我做错了什么。有人可以帮我吗?
    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2016-12-03
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多