首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索不提供页码较大的数据

弹性搜索不提供页码较大的数据
EN

Stack Overflow用户
提问于 2018-03-16 12:18:54
回答 2查看 7.3K关注 0票数 4

要获取的数据大小:大约20,000

问题:在python中使用下面的命令搜索弹性搜索索引数据

但没有得到任何结果。

代码语言:javascript
复制
from pyelasticsearch import ElasticSearch
es_repo = ElasticSearch(settings.ES_INDEX_URL)
search_results = es_repo.search(
            query, index=advertiser_name, es_from=_from, size=_size)

,如果我给出的尺寸小于或等于10,000,它工作得很好,但是不能用20,000,请帮我找到这个问题的最佳解决方案。

PS:在深入挖掘ES时,发现了以下消息错误:

结果窗口太大,from + size必须小于或等于: 10000但为19999。有关请求大型数据集的更有效方法,请参见滚动API。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-16 12:47:06

对于实时使用,最好的解决方案是使用搜索后查询。您只需要一个日期字段,以及另一个唯一标识文档的字段--足够的_id字段或_uid字段了。尝试这样的方法,在我的示例中,我希望提取属于单个用户的所有文档-在我的示例中,用户字段有一个keyword datatype

代码语言:javascript
复制
from elasticsearch import Elasticsearch


es = Elasticsearch()
es_index = "your_index_name"
documento = "your_doc_type"

user = "Francesco Totti"

body2 = {
        "query": {
        "term" : { "user" : user } 
            }
        }

res = es.count(index=es_index, doc_type=documento, body= body2)
size = res['count']


body = { "size": 10,
            "query": {
                "term" : {
                    "user" : user
                }
            },
            "sort": [
                {"date": "asc"},
                {"_uid": "desc"}
            ]
        }

result = es.search(index=es_index, doc_type=documento, body= body)
bookmark = [result['hits']['hits'][-1]['sort'][0], str(result['hits']['hits'][-1]['sort'][1]) ]

body1 = {"size": 10,
            "query": {
                "term" : {
                    "user" : user
                }
            },
            "search_after": bookmark,
            "sort": [
                {"date": "asc"},
                {"_uid": "desc"}
            ]
        }




while len(result['hits']['hits']) < size:
    res =es.search(index=es_index, doc_type=documento, body= body1)
    for el in res['hits']['hits']:
        result['hits']['hits'].append( el )
    bookmark = [res['hits']['hits'][-1]['sort'][0], str(result['hits']['hits'][-1]['sort'][1]) ]
    body1 = {"size": 10,
            "query": {
                "term" : {
                    "user" : user
                }
            },
            "search_after": bookmark,
            "sort": [
                {"date": "asc"},
                {"_uid": "desc"}
            ]
        }

然后,您将发现附加在result var中的所有文档。

如果您想使用scroll query - doc 这里

代码语言:javascript
复制
from elasticsearch import Elasticsearch, helpers

es = Elasticsearch()
es_index = "your_index_name"
documento = "your_doc_type"

user = "Francesco Totti"

body = {
        "query": {
        "term" : { "user" : user } 
             }
        }

res = helpers.scan(
                client = es,
                scroll = '2m',
                query = body, 
                index = es_index)

for i in res:
    print(i)
票数 10
EN

Stack Overflow用户

发布于 2018-03-16 12:21:56

可能是它的ElasticSearch约束。

代码语言:javascript
复制
index.max_result_window index setting which defaults to 10,000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49320599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档