匹配弹性搜索中的精确短语

时间:2016-12-05 07:26:20

标签: elasticsearch

所以我有这样的查询:

{  
   "from":0,
   "size":20,
   "sort":{  
      "prices_count":"desc"
   },
   "query":{  
      "bool":{  
         "must":[  
            {  
               "terms":{  
                  "category_ids":[  
                     "3"
                  ]
               }
            },     
            {  
               "nested":{  
                  "path":"specs",
                  "query":{  
                     "bool":{  
                        "must":[  
                           {  
                              "match_phrase":{  
                                 "specs.model":"iphone-6s"
                              }
                           }
                        ]
                     }
                  }
               }
            }
         ]
      }
   }
}

我的问题在于嵌套查询部分。 specs.model查询不仅匹配具有模型iphone-6s的文档,还匹配iphone-6s-plus的文档,我尝试使用term匹配,但之后我得不到任何结果。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

根据docs

  

not_analyzed:

     

索引此字段,因此可以搜索,但可以完全按照指定索引值。不要分析它。

在映射中设置model: not_analyzed,如:

{
  "model": {
    "type":     "string",
    "index":    "not_analyzed"
  }
}

然后使用term进行查询。