弹性搜索在多次运行同一查询时返回不一致的结果

时间:2014-10-29 10:40:40

标签: search elasticsearch

我们已在单个节点上使用elasticsearch索引数据。我们在后台运行一个线程,用于使用最近的更改来更新索引。

现在我们使用弹性搜索API来运行搜索查询。

{
  "from" : 0,
  "size" : 20,
  "timeout" : 0,
  "query" : {
    "filtered" : {
      "query" : {
        "query_string" : {
          "query" : "Bug-157099*",
          "default_field" : "_content",
          "default_operator" : "and",
          "allow_leading_wildcard" : true,
          "analyze_wildcard" : true
        }
      },
      "filter" : {
        "fquery" : {
          "query" : {
            "query_string" : {
              "query" : "pxObjClass:(\"ProjMgmt-Work-Project\")",
              "default_field" : "_content",
              "default_operator" : "and",
              "allow_leading_wildcard" : true
            }
          },
          "_cache" : false
        }
      }
    }
  },
  "fields" : "*"
}

但是,搜索查询会返回不一致的结果。在连续重新运行查询时,有时我们会得到0个结果,有时会得到部分结果,有时我们会得到完整的结果。

我们在群集中面临此问题,其中只有一个节点是索引节点。

您能告诉我们可能导致此问题的原因吗?

1 个答案:

答案 0 :(得分:1)

问题是由于查询中设置了超时。在我们的代码的某些部分,我们将超时设置为零。我们更正了代码,现在查询工作正常。

我在这里插入了正确的查询

{
  "from" : 0,
  "size" : 20,
  "query" : {
    "filtered" : {
      "query" : {
        "query_string" : {
          "query" : "BUg-157099*",
          "default_field" : "_content",
          "default_operator" : "and",
          "allow_leading_wildcard" : true,
          "analyze_wildcard" : true
        }
      },
      "filter" : {
        "fquery" : {
          "query" : {
            "query_string" : {
              "query" : "pxObjClass:(\"ProjMgmt-Work-Project\")",
              "default_field" : "_content",
              "default_operator" : "and",
              "allow_leading_wildcard" : true
            }
          },
          "_cache" : false
        }
      }
    }
  },
  "fields" : "*"
}