如何在弹性搜索中进行多文本搜索

时间:2016-03-31 05:06:18

标签: elasticsearch

我想在同一个字段中进行多个文本搜索

例如在sub_cat_seo_url字段中我希望按语言和区域过滤“english-news”和“business-news”

当我尝试下面的代码时它不起作用

{
   "query":{
      "filtered":{
         "query":{
            "query_string":{
               "query":[
                  "english-news",
                  "business-news"
               ],
               "fields":[
                  "sub_cat_seo_url"
               ]
            }
         },
         "filter":{
            "bool":{
               "must":[
                  {
                     "term":{
                        "lang":"en"
                     }
                  },
                  {
                     "term":{
                        "region":"1"
                     }
                  }
               ]
            }
         }
      }
   }
}

对于单文本搜索,它工作正常

{
   "query":{
      "filtered":{
         "query":{
            "query_string":{
               "query":"english-news",
               "fields":[
                  "sub_cat_seo_url"
               ]
            }
         },
         "filter":{
            "bool":{
               "must":[
                  {
                     "term":{
                        "lang":"en"
                     }
                  },
                  {
                     "term":{
                        "region":"1"
                     }
                  }
               ]
            }
         }
      }
   }
}

请帮助我的代码中需要更改的内容,在同一字段(或操作)中进行多文本搜索

由于

Thanigaivelan

1 个答案:

答案 0 :(得分:0)

试试这个

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "\"english-news\" AND \"business-news\"",
          "fields": [
            "sub_cat_seo_url"
          ]
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "lang": "en"
              }
            },
            {
              "term": {
                "region": "1"
              }
            }
          ]
        }
      }
    }
  }
}