如何在具有multi_field类型的字段上查询和应用过滤器

时间:2015-07-17 12:41:15

标签: elasticsearch

我正在浏览文档并了解multi_field用于在一个字段上应用不同的分析器。

{
"tweet" : {
    "properties" : {
        "name" : {
            "type" : "multi_field",
            "fields" : {
                "name" : {"type" : "string", "index" : "analyzed"},
                "untouched" : {"type" : "string", "index" : "not_analyzed"}
            }
        }
    }
}

}

我已将数据编入索引如下

/tweet/1   { 
  "name" : "anil"
}

我正在寻找以下相同的内容。

/<indexname>/_search

我得到的数据如下。

hits : [
{
           "_index" : ...
           ....
           "_source" : {
                  "name" : "anil" 
          }
 }
]

到目前为止这很好。

现在我正在寻找比赛。

GET <indexname>/_search
   {
          "query": {
              "match": {
                 "name": "anil"
              }
           }
    }

上面的一个工作正常,因为我已经应用了分析仪。

我的问题是,如果我想要使用精确字符串应用过滤器,我会得到0次点击。

GET <indexname>/_search
        {
           "query": {
                   "filtered": {
                         "query": {
                              "match_all": {}
                          },
                          "filter": {
                                  "term": {
                                        "name" : "anil"
                                    }
                          }
                   }
               }
         }

请建议做什么。

1 个答案:

答案 0 :(得分:2)

你试过这个吗?

GET <indexname>/_search
    {
       "query": {
               "filtered": {
                     "query": {
                          "match_all": {}
                      },
                      "filter": {
                              "term": {
                                    "name.untouched" : "anil"
                                }
                      }
               }
           }
     }

此外,您不必再使用multi_fields,您可以使用字段,如here所述,但我认为这不是您问题的原因。