在弹性搜索中,我试图多个搜索具有多个值的多个字段是否可能?

时间:2014-03-29 03:11:31

标签: elasticsearch

我将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" ] 
  }
}'

它似乎不起作用。

我做错了什么?感谢

2 个答案:

答案 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"