The*_*boy 0 mongoose mongodb node.js elasticsearch elasticsearch-plugin
我有一个端点,我正在代理ElasticSearch API,用于我正在进行的简单用户搜索.
/users?nickname=myUsername&email=myemail@gmail.com&name=John+Smith
Run Code Online (Sandbox Code Playgroud)
Somet有关这些参数的详细信息如下
ElasticSearch搜索调用应将参数统称为AND'd.
现在,我不确定从哪里开始,因为我能够单独执行每个参数的查询,但不是全部.
client.search({
index: 'users',
type: 'user',
body: {
"query": {
//NEED TO FILL THIS IN
}
}
}).then(function(resp){
//Do something with search results
});
Run Code Online (Sandbox Code Playgroud)
首先,您需要为此特定用例创建映射.
curl -X PUT "http://$hostname:9200/myindex/mytype/_mapping" -d '{
"mytype": {
"properties": {
"email": {
"type": "string",
"index": "not_analyzed"
},
"nickname": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
通过将电子邮件设为not_analyzed,您确保只有完全匹配才有效.完成后,您需要进行查询.由于我们有多个条件,因此使用bool查询是个好主意.您可以组合多个查询以及如何使用bool查询处理它们
查询 -
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "qbox"
}
},
{
"prefix": {
"nickname": "qbo"
}
},
{
"match": {
"email": "me@qbox.io"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用前缀查询,您告诉Elasticsearch即使令牌以qbo开头,也将其限定为匹配.
前缀查询也可能不是很快,在这种情况下你可以去ngram分析器 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |