【问题标题】:elasticsearch-dsl search works only in debug modeelasticsearch-dsl 搜索仅在调试模式下工作
【发布时间】:2017-08-16 21:42:32
【问题描述】:

我在我的项目中使用 Python 中的 elasticsearch-dsl 包。我有一个非常简单的搜索查询,如下所示:

    s = Search(using=connections.get_connection(), index= 'registry', doc_type=['storage_doc']).params(request_timeout=60)        
    s.filter("match", postcode="SW1").query("match", forename="Brendan")                
    response = s.execute(ignore_cache=True)        
    print(response.success())
    print(response.took)
    print(response.to_dict()) 
    print('Total %d hits found.' % response.hits.total)

如果我在调试模式下执行它可以正常工作,但是当我从控制台运行代码时,我总是得到 0 次点击。我不知道为什么会这样,我已经花了半天时间试图找到解决方案。有什么想法吗?

【问题讨论】:

  • “调试模式”是什么意思?
  • 我正在使用 VS Code 并对此进行调试。如果我处于调试模式,那么它可以工作。如果我运行 python 那么它不是。真奇怪
  • 我对那个 IDE 了解不多,但是您的连接定义是否可能以某种方式在您的 IDE 中设置?可能值得在控制台上使用pdb 逐步完成此操作。

标签: python elasticsearch elasticsearch-dsl elasticsearch-dsl-py


【解决方案1】:

弹性“索引”操作中有一个参数称为“刷新”,具有三个选项。如果您设置 refresh='true' 则在弹性添加数据到索引后,您将获得索引操作的响应。 从这里:enter link description here

refresh – 如果为 true,则刷新受影响的分片以使此操作对搜索可见,如果 wait_for 则等待刷新以使此操作对搜索可见,如果为 false(默认值)则不执行任何刷新操作。有效选择分别是:'true'、'false'、'wait_for'

【讨论】:

  • 这救了我的培根!!!谢谢
【解决方案2】:

问题是搜索是在索引该测试数据后立即进行的。可能 Elasticsearch 没有足够的时间来索引数据并进行搜索,结果我的命中率为零。如果索引发生在与搜索不同的时间点,那么一切都会按预期工作。这种行为纯粹是我们当前正在运行的早期测试的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多