我刚开始使用ElasticSearch,却遇到了如何搜索的麻烦(我不一定要理解)。
首先,我有两个文件:
{ "took": 133 "timed_out": false "_shards": { "total": 5 "successful": 5 "failed": 0 } "hits": { "total": 2 "max_score": 1 "hits": [2] 0: { "_index": "app" "_type": "player" "_id": "AVcLCOgAi_gt2Fih02MK" "_score": 1 "_source": { "nickName": "sarasa" "birthDate": "1994-11-05T13:15:30.000Z" "state": "sarasa" "adminState": "sarasa" "id": "" "account": { "type": "yojuego" "id": "asasdfa" "password": "asd fasd" } } } 1: { "_index": "app" "_type": "player" "_id": "AVcQ7JNVi_gt2Fih02MN" "_score": 1 "_source": { "nickName": "facundo" "birthDate": "1994-11-05T13:15:30.000Z" "state": "verdura" "adminState": "sudo" "id": "" "account": { "type": "yojuego" "id": "facundo@facundo" "password": "pepe" } } } } } }
我想获取account.id =“ facundo @ facundo”和account.type =“ yojuego”的位置。我正在这样做:
client.search({ index: 'app', type: 'player', query: { bool: { must: [ { term: { "account.id": 'facundo@facundo' } }, { term: { "account.type": 'yojuego' } } ], } } }, (error, response, status) => { if (error) { res.json(400, err); } else { res.json(200, response.hits.hits); } });
该搜索将我拥有的所有文档检索到索引中。有什么帮助吗?
谢谢!
PD:这是我创建索引和映射的方式:
client.indices.create({ index: 'yojuego' }, (err, resp, respcode) => { if (!err) { client.indices.putMapping({ index: 'app', type: "player", body: { properties: { nickName: { type: "string" }, birthDate: { type: "string" }, state: { type: "string" }, adminState: { type: "string" }, account: { type: "nested", properties: { id: { type: "string" }, type: { type: "string" }, password: { type: "string" } } } } } }, (err, resp, respcode) => { res.json(200, resp); }); } });
确保该帐户是一个嵌套字段,然后应用此查询,
{ "query": { "bool": { "must": [ { "nested": { "path": "account", "query": { "bool": { "must": [ { "match": { "account.id": "facundo@facundo" } }, { "match": { "account.type": "yojuego" } } ] } } } } ] } } }