1

我在 EC2 实例上使用 elasticsearch 0.20.2(16GB RAM,未启用交换)。我有很多索引文档,当我尝试做方面结果时,我得到了堆空间错误,然后弹性搜索服务器不可用。我正在增加 Java 的堆内存,但没有任何帮助。所以我的问题是我可以限制将应用哪个方面的文档数量。

这是我的设置和映射:

my_settings = {
    'settings': {
        'analysis': {
            'analyzer': {
                'text_analyzer': {
                    'tokenizer': 'standard',
                    'filter': ['standard', 'lowercase']
                },
                'suggestions_analyzer': {
                    'tokenizer': 'standard',
                    'filter': ['suggestions_shingle']
                }
            },
            'filter': {
                'suggestions_shingle': {
                    'type': 'shingle',
                    'min_shingle_size': 2,
                    'max_shingle_size': 5
                }
            }
        }
    }
}

my_mapping = {
    'test-type':{
        'properties':{
            'publish_datetime': {'type': 'date'},
            'text': {
                'type': 'multi_field',
                'fields': {
                    'text': {'type': 'string', 'analyzer': 'text_analyzer', 'include_in_all': True},
                    'suggestions': {'type': 'string', 'analyzer': 'suggestions_analyzer', 'include_in_all': False}
                }
            }
        }
    }
}

我的搜索查询是:

query = {
    'filtered': {
        'filter' : {
            'limit' : {'value' : 10}
        },
        'query':{
            'prefix':{
                    'text.suggestions': 'wha'
            }
        },
    },
    'facets':{
        'text_suggestions':{
            'terms':{
                'field':'text.suggestions',
                'regex':'^%s.*' % 'wha',
                'size': 5
            }
        }
    },
    'size': 0
}

是否有人成功限制将与我们分享的文件数量。

4

1 回答 1

2

不,不可能人为地限制运行聚合的文档数量——聚合显然是不正确的。构面受您发出的查询(以及您使用的任何 facet_filters)的限制。

所以,有几个方法要记住:

  • 通常,方面将受到query您发送到 Elasticsearch的限制
  • 您正在处理的字段的值将被加载到内存中
  • 有一些技术可以防止临时分面的内存不足错误,但它们对于常规的用户公开搜索/分面没有用

请参阅邮件列表中预先讨论的Estimating field cache size for facets 。

根据您发布的查询,不清楚您要在text.suggestions现场进行刻面做什么?

于 2013-01-21T08:02:34.547 回答