从ElasticSearch连接查询值以避免创建新字段

hrysbysz  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(127)

我正在用ElasticSearch查询一个字段。该字段可以是“小”、“中”、“平均”、“大”。
但我希望“Small”和“Medium”返回“Yes”,“Average”和“Big”返回“No”
有没有办法在查询中做到这一点?或者在React式搜索中使用列表组件?
谢谢

cigdeys3

cigdeys31#

您可以使用script_field

{
  "_source": "*", 
   "script_fields": {
     "custom_field": {
       "script": {
         "source":  """
                        if(doc['description.keyword'].value=='Small' || doc['description.keyword'].value=='Medium')
                          return 'Yes';
                        else
                          return 'No';
                    """
       }
     }
   }
}

结果

"hits" : [
      {
        "_index" : "index68",
        "_type" : "_doc",
        "_id" : "GyEhPYQBJutE-yZceoEO",
        "_score" : 1.0,
        "_source" : {
          "description" : "Small",
          "title" : "A"
        },
        "fields" : {
          "custom_field" : [
            "Yes"
          ]
        }
      },
      {
        "_index" : "index68",
        "_type" : "_doc",
        "_id" : "HCEhPYQBJutE-yZcpoGE",
        "_score" : 1.0,
        "_source" : {
          "description" : "Medium",
          "title" : "B"
        },
        "fields" : {
          "custom_field" : [
            "Yes"
          ]
        }
      },
      {
        "_index" : "index68",
        "_type" : "_doc",
        "_id" : "HSEhPYQBJutE-yZctoHu",
        "_score" : 1.0,
        "_source" : {
          "description" : "Average",
          "title" : "B"
        },
        "fields" : {
          "custom_field" : [
            "No"
          ]
        }
      },
      {
        "_index" : "index68",
        "_type" : "_doc",
        "_id" : "HiEhPYQBJutE-yZc04Fx",
        "_score" : 1.0,
        "_source" : {
          "description" : "Big",
          "title" : "C"
        },
        "fields" : {
          "custom_field" : [
            "No"
          ]
        }
      }
    ]

相关问题