我在弹性搜索中使用mapper-attachment有65000个文档(pdf,docx,txt,..等)索引.现在我想使用以下查询搜索该存储文档中的内容:
"from" : 0, "size" : 50,
"query": {
"match": {
"my_attachment.content": req.params.name
}
}
Run Code Online (Sandbox Code Playgroud)
但结果需要20-30秒.这是非常缓慢的反应.那么我需要做些什么来快速回应?任何的想法?
这是映射:
"my_attachment": {
"type": "attachment",
"fields": {
"content": {
"type": "string",
"store": true,
"term_vector": "with_positions_offsets"
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于你的机器有4个CPU和索引5分片,我建议切换到4个主分片,这意味着你需要重新索引.这种方法的原因是在任何给定时间一次执行查询将使用4个核心.对于其中一个分片,查询需要等待.要在查询时具有相等的负载分配,请使用4个主分片(= CPU核心数),以便在运行查询时CPU级别不会有太多争用.
另外,通过提供curl localhost:9200/your_documents_index/_stats
I 的输出,看到"fetch"部分(从分片中检索文档)平均每个操作花费4.2秒.这可能是因为拥有非常大的文档或检索大量文档.size: 50
不是一个很大的数字,但与大文档相结合,它将使查询在更长的时间内返回结果.
文档说,该content
字段(其中包含实际文档的字段)有store: true
,如果您想要突出显示
为了执行突出显示,需要该字段的实际内容.如果存储了相关字段(已在映射中
store
设置true
),则将使用_source
该字段,否则将加载实际字段并从中提取相关字段.
因此,如果您没有禁用_source
索引,那么将使用它并且不需要存储内容.快速获取也没有什么神奇之处,它与文档的大小和想要检索的数量密切相关.不使用store: true
可能会略微改善时间.
从节点stats(curl -XGET "http://localhost:9200/_nodes/stats"
)没有迹象表明节点有内存或CPU问题,所以一切都归结为我以前的建议.
归档时间: |
|
查看次数: |
1606 次 |
最近记录: |