当前位置: 首页 > 面试题库 >

Elastic search不提供大量的页面大小数据

阮飞翔
2023-03-14
问题内容

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

问题:在python中使用以下命令搜索Elastic Search索引数据

但没有得到任何结果。

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时发现此消息错误:

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


问题答案:

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

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"}
            ]
        }

然后,您将找到附加到resultvar的所有文档

如果您想在此处使用scroll query-doc

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)


 类似资料:
  • 问题内容: 要获取的数据大小:大约20,000 问题:在python中使用以下命令搜索Elastic Search索引数据 但没有得到任何结果。 如果我给的尺寸小于或等于10,000,则可以正常工作,但不能与20,000相匹配, 请帮助我找到最佳的解决方案。 PS:在深入研究ES时发现此消息错误: 结果窗口太大,从+大小必须小于或等于:[10000],但为[19999]。有关请求大数据集的更有效方

  • 我不知道这是怎么回事。所以任何人都可以帮我做这件事。

  • 对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写! 考虑以下文件: 运行以下查询: 返回: 是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的感兴趣。 Elasticsearch论坛中的问题 谢谢,伊泰

  • 我有一个RESTAPIendpoint,它将返回一个

  • 问题内容: 我阅读了有关Lucene限制2Gb文档的说明。在Elasticsearch中可以建立索引的文档大小是否还有其他限制? 问题答案: Lucene内部使用一个字节缓冲区,该缓冲区使用32位整数进行寻址。根据定义,这限制了文档的大小。因此,理论上最大2GB。 在ElasticSearch中: ES GitHub代码中有一个,并将其设置为或。因此,基本上, 2GB是通过HTTP进行批量索引的最

  • 有没有办法为Spring的NamedParameterJdbcTemplate对象设置批处理大小? 在我的项目中,我遇到了一些OutOfMemory问题,但我能够通过在一个较小的块循环中调用NamedParameterJdbcTemplate来解决它。但这需要一些额外的努力,比如确定块大小,将一个大列表拆分成更小的子列表等等。 我想知道NamedParameterJdbcTemplate是否有这样