如果其中一个条目为空,则弹性不会搜索

时间:2016-01-18 17:45:37

标签: elasticsearch

我有这个代码,效果很好:

   res = es.search(index="myindex", 
        body={
            "from" : 0, "size" : 100, "query": {
                "bool": {
                    "should": [{
                        "match": { 'p_name': p_name},
                        "match": { 'p_desc': p_desc},
                        "match": { 'p_ingr': p_ingr}
                        }]}}})

但有时候p_desc或p_ingr为空,这些记录的弹性不会搜索。

我可以对这些记录进行弹性搜索吗?

1 个答案:

答案 0 :(得分:0)

您可以使用empty字段在script上搜索空字符串。试试这个

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "p_name": p_name
          }
        },
        {
          "match": {
            "p_desc": p_desc
          }
        },
        {
          "match": {
            "p_ingr": p_ingr
          }
        },
        {
          "bool": {
            "filter": {
              "script": {
                "script": "doc['p_desc'].empty || doc['p_ingr'].empty"
              }
            }
          }
        }
      ]
    }
  }
}

此查询将返回p_descp_ingr为空字符串的结果,""