我正在使用elasticsearch(来自searchly的托管实例)和elasticsearch-js npm客户端库。我想从一个术语中搜索索引中的多个字段。似乎有documentation的负载,例如
GET /_search
{
"query": {
"bool": {
"should": [
{ "match": { "title": "War and Peace" }},
{ "match": { "author": "Leo Tolstoy" }}
]
}
}
}
我可以为作者和标题设置相同的值。但是,这是一个get请求,其结构与nodejs库不同,我在这里执行此操作:
this._client.search({
index: 'sample',
body: {
query: {
match: {
name: 'toFind'
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});
我不能有多个match:
字段,否则tsc会抱怨严格模式,如果我尝试这样的话:
query: {
match: {
name: 'toFind',
description: 'toFind'
}
}
然后我收到一个错误:
“type”:“query_parsing_exception”,
“reason”:“[match]查询以简化形式解析,带有直接字段名称,但包含的选项多于字段名称,可能使用\ u0027options \ u0027表单,带有\ u0027query \ u0027元素?”,
答案 0 :(得分:3)
由于您希望在多个字段上匹配相同的字符串,因此需要multi match查询。试试这样的事情
this._client.search({
index: 'sample',
body: {
query: {
multi_match: {
query: 'toFind',
fields: ['name','description']
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});