在弹性搜索中使用query_string旁边的过滤器

时间:2014-09-29 08:07:43

标签: elasticsearch filter full-text-search

如何进行全文搜索并进行过滤?我想在language_id=10的文档中搜索文本。我已经这样试过了:

{
  "query": {
    "query_string": {
      "query": "Declared"
    },
    {
      "filtered": {
        "filter": {
          "term": {
            "language_id": 10
          }
        }
      }
    }
  }
}

但似乎不正确。如何纠正?

3 个答案:

答案 0 :(得分:14)

是的,过滤后的查询的语法有点麻烦。 AFAIK看起来应该是这样的:

{
   "query":{
      "filtered":{
         "query":{
            "query_string":{
               "query":"Declared"
            }
         },
         "filter":{
            "term":{
               "language_id":10
            }
         }
      }
   }
}

答案 1 :(得分:11)

在5.2版中,过滤后的查询被bool查询替换,并在我的Elastic 5.2实例上返回错误。请参阅here

新语法是:

{
   "query":{
      "bool":{
         "must":{
            "query_string":{
               "query":"Declared"
            }
         },
         "filter":{
            "term":{
               "language_id":10
            }
         }
      }
   }
}

答案 2 :(得分:3)

抱歉Ashalynd但是过滤器没有放在你答案的正确位置。

这样做效果更好:

{
   "query":{
      "filtered":{
         "query":{
            "query_string":{
               "query":"Declared"
            }
         },
         "filter":{
            "term":{
               "language_id":10
            }
         }
      }
   }
}