Elasticsearch多重匹配在提供空字符串时不返回所有结果

Elasticsearch多重匹配在提供空字符串时不返回所有结果,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我总共有1783条记录,我希望ES返回所有记录,以防未提供multi_match查询(searchObject.query='') 如果我将一个空数组传递给query.bool,应该,那么理论上我可以根据searchObject.query值更新下面的ES对象,但我不确定这是否是个好主意 { _source: [ 'id', 'event', 'description', 'element', 'date'

我总共有1783条记录,我希望ES返回所有记录,以防未提供multi_match查询(
searchObject.query=''

如果我将一个空数组传递给query.bool,应该,那么理论上我可以根据
searchObject.query
值更新下面的ES对象,但我不确定这是否是个好主意

{
    _source: [
        'id',
        'event',
        'description',
        'element',
        'date'
    ],
    track_total_hits: true,
    query: {
        bool: {
            should: [{
                multi_match:{
                    query: searchObject.query
                    fields: ["element","description","nar.*","title","identifier"]
                }
            }],
            filter: []
        }
    },
    highlight: { fields: { '*': {} } },
    sort: [],
    from: 0,
    size: 10
}
有什么建议吗?

您可以在
的should
后面加上:

{
  "_source": [
    "id",
    "event",
    "description",
    "element",
    "date"
  ],
  "track_total_hits": true,
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "",
            "fields": [
              "line",
              "element",
              "description",
              "nar.*",
              "title",
              "identifier"
            ]
          }
        },
        {
          "match_all": {}
        }
      ],
      "filter": []
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  },
  "sort": [],
  "from": 0,
  "size": 10
}
这就是它通常的用途。IMHO在执行ES请求之前应检查空字符串。我假设它是来自自动完成之类的。

您可以在
应该
中附加一个:

{
  "_source": [
    "id",
    "event",
    "description",
    "element",
    "date"
  ],
  "track_total_hits": true,
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "",
            "fields": [
              "line",
              "element",
              "description",
              "nar.*",
              "title",
              "identifier"
            ]
          }
        },
        {
          "match_all": {}
        }
      ],
      "filter": []
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  },
  "sort": [],
  "from": 0,
  "size": 10
}

这就是它通常的用途。IMHO在执行ES请求之前应检查空字符串。我假设它来自自动完成之类的程序。

谢谢你的回答!事实上,查询字符串来自输入,如果用户实际键入某个内容,我仍然不确定这是如何工作的?在这种情况下,您应该在前端决定发送哪个查询。也检查这里的对话:我检查了这个链接,他的问题与我的问题非常相似,只是如果没有提供查询参数,我想返回所有文档,否则就执行普通的多匹配查询。我是否可以基于查询参数构建bool对象,然后将其传递给ES?我想在query param为空的情况下使用match_all,否则使用multi_match,因为我通常不知道这样的条件。在之前构建查询…如果我没有使用这些条件,我应该如何在之前构建查询?如果查询参数不为空,我仍然需要multi_match object,并且我仍然需要match_all object返回所有记录。谢谢您的回答!事实上,查询字符串来自输入,如果用户实际键入某个内容,我仍然不确定这是如何工作的?在这种情况下,您应该在前端决定发送哪个查询。也检查这里的对话:我检查了这个链接,他的问题与我的问题非常相似,只是如果没有提供查询参数,我想返回所有文档,否则就执行普通的多匹配查询。我是否可以基于查询参数构建bool对象,然后将其传递给ES?我想在query param为空的情况下使用match_all,否则使用multi_match,因为我通常不知道这样的条件。在之前构建查询…如果我没有使用这些条件,我应该如何在之前构建查询?如果查询参数不是空的,我仍然需要multi_match对象,并且我仍然需要match_all对象来返回所有记录。