我将firstname和lastname映射到“not_analyzed”
curl -XDELETE "http://127.0.0.1:9200/data/_query" -d'
{
"multi_match" : {
"query": "Will"
"fields": [ "firstname" ]
},{
"query": "Smith"
"fields": [ "lastname" ]
}
}'
它似乎不起作用。
我做错了什么?感谢
答案 0 :(得分:1)
是否要删除与您的查询匹配的所有文档或搜索它们?如果要搜索它们。尝试:
curl -XPOST "http://localhost:9200/data/_search" -d'{
"query": {
"bool": {
"must": [
{
"term": {
"firstname": "Will"
}
},
{
"term": {
"lastname": "Smith"
}
}
]
}
}
}'
答案 1 :(得分:1)
很多Elasticsearch的文档中缺少的部分是查询本身位于query
(或filter
)内,并且意味着暗示。
现在,由于它们是不同的字段,具有不同的值,您可以进入几个不同的方向,但我认为最好的选择是使用bool query
:
{
"query" : {
"bool" : {
"must" : [
{ "term" : { "firstname" : "Will" } },
{ "term" : { "lastname" : "Smith" } }
]
}
}
}
那应该匹配:
{
"firstname" : "Will",
"lastname" : "Smith"
}
如果你有像
这样的结构{
"name" : {
"first" : "Will",
"last" : "Smith"
}
}
然后您只需将"firstname"
和"lastname"
分别更改为"name.first"
和"name.last"
。