在特定的类型字段中搜索

时间:2017-02-17 12:30:11

标签: elasticsearch

考虑以下问题:

{
    "query" : {
        "match_phrase" : {
            "_all" : "Smith"
        }
    }
}

我如何指定它可以搜索哪些类型的字段,而不是搜索所有内容? (字段名称在不同类型中可能是非唯一的)

我已经尝试了下面的查询,但它没有用(它不会返回结果,当我从所有字段中删除person.时会这样做):

{
  "query": {
    "multi_match": {
      "query": "Smith",
      "fields": [
        "person.first_name",
        "person.last_name",
        "person.age"
      ],
      "lenient": true
    }
  }
}

我将这些查询发送到http://localhost:9200/tsf-model/_search

1 个答案:

答案 0 :(得分:1)

如果您可以动态构建查询,我认为您可以为每种类型使用multi_match查询和type query的组合,以实现您的目标:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "bool": {
            "filter": [
              {
                "type": {
                  "value": "type1"
                }
              },
              {
                "multi_match": {
                  "query": "Smith",
                  "fields": [
                    "field1",
                    "field3",
                    "field5"
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": [
              {
                "type": {
                  "value": "type2"
                }
              },
              {
                "multi_match": {
                  "query": "Smith",
                  "fields": [
                    "field2",
                    "field4",
                    "field6"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}