我在文章http://www.bilyachat.com/2015/07/search-like-google-with-elasticsearch.html之后使用ElasticSearch创建了一个简单的自动填充。
以下是一个简单的例子。 https://gist.github.com/jinkyou/ac92c0d9fc53860b703ac773af03b0da
首先,我没有将"fielddata": true
设置为自动完成属性。
然后ES返回错误。
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [autocomplete] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
}
因此,我将"fielddata": true
添加到自动填充的属性中,并且工作正常。
但是在文档增加后,发生了[fielddata] Data too large, data for [autocomplete] would be larger than limit of [249416908/237.8mb]]
错误。
这是我的问题。
这是实施“自动填充”的正确方法吗?
我虽然这是搜索引擎的常见功能,但在ES中没有它的建议。我是对的吗?
此功能需要'fielddata'吗?
我认为即使这个功能没有必要,我也需要它在短时间内做出回应。
如何减少fielddata大小?或者增加fielddata限制大小?
我会尝试减少max_shingle_size
。如果有其他好方法,请告诉我。
ES的实际内存使用量是什么
我想知道文档大小后的内存消耗,但GET _nodes/stats
的结果包含奇怪的内容
{
"os": {
"mem": {
"total_in_bytes": 128922271744,
"free_in_bytes": 2966560768,
"used_in_bytes": 125955710976,
"free_percent": 2,
"used_percent": 98
}
}
}
我只是打开ES并且没有索引,但它显示了几乎正在使用的记忆。
非常感谢您阅读此内容。