2015-09-19 59 views
1

我有这种情况下,在同一个查询内有两个multi_match搜索。麻烦的是,当我在ruby中为它创建JSON时,具有非唯一键的json似乎不可能,因此只有其中一个出现。Elasticsearch在红宝石多个multi_match查询的DSL

这里是我的查询:

{ 
    "fields": ["id", "title", 
    "address.city", "address.state", "address.country", "address.state_code", "address.country_code", "proxy_titles", "location"], 
    "size":2, 
    "query":{ 
     "filtered":{ 
      "filter": { 
       "range": { 
        "custom_score": { 
         "gte": 100 
        } 
       } 
      }, 
      "query":{ 
       "bool": { 
        "must": { 
         "multi_match":{ 
          "query": "term 1", 
          "type": "cross_fields", 
          "fields": ["title^2", "proxy_titles^2","description"] 
         } 
        }, 
        "must": { 
         "multi_match": { 
          "query": "us", 
          "fields": ["address.city", "address.country", "address.state", 
          "address.zone", "address.country_code", "address.state_code", "address.zone_code"] 
         } 
        } 
       } 
      } 
     } 
    }, 
    "sort": { 
     "_score": { "order": "desc" }, 
     "variation": {"order": "asc"}, 
     "updated_at": { "order": "desc" } 
    } 
} 

我也是最近才用elasticsearch所以这是非常有益的,如果你可以建议我一个更好的查询来完成同样也开始了。

回答

1

您的语法错误。对于"bool"中的多个"must"值,它们需要位于数组中。不幸的是,文件并不总是非常有用(bool query page显示"should"而不是"must")。

试试这个:

{ 
    "fields": ["id","title","address.city","address.state","address.country","address.state_code","address.country_code","proxy_titles","location"], 
    "size": 2, 
    "query": { 
     "filtered": { 
     "filter": { 
      "range": { 
       "custom_score": { 
        "gte": 100 
       } 
      } 
     }, 
     "query": { 
      "bool": [ 
       { 
        "must": { 
        "multi_match": { 
         "query": "term 1", 
         "type": "cross_fields", 
         "fields": ["title^2","proxy_titles^2","description"] 
        } 
        } 
       }, 
       { 
        "must": { 
        "multi_match": { 
         "query": "us", 
         "fields": ["address.city","address.country","address.state","address.zone","address.country_code","address.state_code","address.zone_code"] 
        } 
        } 
       } 
      ] 
     } 
     } 
    }, 
    "sort": { 
     "_score": { 
     "order": "desc" 
     }, 
     "variation": { 
     "order": "asc" 
     }, 
     "updated_at": { 
     "order": "desc" 
     } 
    } 
} 
+0

谢谢你,这个工作! –