我在使用mapper-attachment进行弹性搜索时有65000个文档(pdf,docx,txt等)索引。现在,我想使用以下查询在该存储文档中搜索内容:
"from" : 0, "size" : 50,
"query": {
"match": {
"my_attachment.content": req.params.name
}
}
但是需要20到30秒才能获得结果。这是非常慢的响应。所以我需要做快速反应吗?任何的想法?
这里是映射:
"my_attachment": {
"type": "attachment",
"fields": {
"content": {
"type": "string",
"store": true,
"term_vector": "with_positions_offsets"
}
}
}
由于您的计算机具有4个CPU,索引为5个分片,因此建议您切换到4个主分片,这意味着您需要重新索引。采用这种方法的原因是,在任何给定时间执行一次查询都将使用4个内核。对于其中一个分片,查询需要等待。要在查询时平均分配负载,请使用4个主分片(= CPU核心数),以便在运行查询时在CPU级别上不会有太多争用。
另外,通过提供curl localhost:9200/your_documents_index/_stats
I的输出,我发现“获取”部分(从分片中检索文档)平均每个操作花费4.2秒。这可能是由于文档非常大或检索了很多文档而导致的。size: 50
不是一个很大的数字,但与大文档结合使用,将使查询在更长的时间内返回结果。
该content
字段(其中包含实际文档的字段)具有store: true
,如果您要突出显示该字段,则文档说
为了执行突出显示,需要该字段的实际内容。如果存储了相关字段(在映射中
store
设置为true
),则将使用_source
该字段,否则将加载实际字段并从中提取相关字段。
因此,如果您没有_source
为索引禁用,则将使用该索引,并且不需要存储内容。此外,获取更快的速度没有任何魔力,它与文档的大小以及要检索的文档数量严格相关。不使用store: true
可能会明显缩短时间。
从节点状态(curl -XGET "http://localhost:9200/_nodes/stats"
)来看,没有迹象表明该节点存在内存或CPU问题,因此一切都归结为我之前的建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句