我有这种情况,其中在同一查询中有两个multi_match搜索。问题是,当我在ruby中为其创建JSON时,似乎无法实现具有非唯一键的json,因此只能显示其中一个。
这是我的查询:
{
"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,因此如果您可以建议我做一个更好的查询来完成同样的事情,这将非常有帮助。
最佳答案
您的语法错误。对于"must"
中的多个"bool"
值,它们必须位于数组中。不幸的是,该文档并不总是很有帮助(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"
}
}
}
关于ruby-on-rails - ruby 中具有多个multi_match查询的Elasticsearch DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32671821/