根据Breaking changes in 2.1: Search changes:
已弃用
scan
搜索类型。现在,通过执行scroll
请求以_doc
顺序对文档进行排序,可以实现此搜索类型的所有好处。
但是,在Node.js(使用官方客户端)中使用scan
搜索类型时,可以获得巨大的性能提升,例如此搜索请求:
es.client.search({
index: 'library',
type: 'page',
scroll: '30s',
search_type: 'scan',
fields: ['page_id'],
q: 'book_id:1681'
}, ...);
而不是这个请求:
es.client.search({
index: 'library',
type: 'page',
scroll: '30s',
sort: ["_doc"],
fields: ['page_id'],
q: 'book_id:1681'
}, ...);
两个请求都返回12530文档(当然在使用scroll
后)。但是scan
搜索类型需要大约1秒,而sort
顺序中的_doc
大约需要4.5秒!
您能告诉我如何通过按_doc顺序排序文档来实现扫描搜索的所有好处吗?
更新:Python中的结果相同。 scan
搜索类型比常规scroll
快得多,并按_doc
顺序排序。
答案 0 :(得分:1)
来自this pull request,Adrien Grand写道:
你有多少个碎片?我问的是
search_type='scan'
每页检索$size * $num_shards
个文档,以下内容如下 是一个更好的比较(假设5个分片):es.search(index='library', doc_type='page', scroll='2m', search_type='scan', size=10, body='{"query":{"term":{"book_id":1681}}}')
VS
es.search(index='library', doc_type='page', scroll='2m', size=50, body='{"query":{"term":{"book_id":1681}},"sort":["_doc"]}')
我对此进行了测试,现在它的性能与scan
相同。