Elasticsearch上_all字段的通配符查询

时间:2016-04-01 18:01:08

标签: elasticsearch

我正在尝试对_all字段执行通配符查询。示例查询可以是:

GET index/type/_search
{
  "from" : 0,
  "size" : 1000,
  "query" : {
    "bool" : {
      "must" : {
        "wildcard" : {
          "_all" : "*tito*"
        }
      }
    }
  }
}

问题是,要使用通配符查询,_all字段需要not_analyzed,否则查询将无法正常工作。有关详细信息,请参阅ES documentation

我尝试使用此请求设置mappings over the _all field

PUT index
{
    "mappings": {
        "type": {
            "_all" : {
              "enabled" : true,
              "index_analyzer": "not_analyzed",
              "search_analyzer": "not_analyzed"
            },
            "_timestamp": {
                "enabled": "true"
            },
            "properties": {
                "someProp": {
                  "type": "date"
                }
            }
        }
    }
}

但是我收到错误分析[not_analyzed]找不到字段[_all]

我想知道我做错了什么,以及是否还有其他(更好)方法来执行此类查询。

感谢.-

2 个答案:

答案 0 :(得分:1)

您是否尝试过删除:

"search_analyzer": "not_analyzed"

另外,我想知道所有属性的通配符的扩展程度如何。你看过NGrams了吗?请参阅文档here

答案 1 :(得分:1)

很可能你想提供选择    { placeid: Number, placename: String, placelongitude: Number, placelatitude: Number, cityname: String, countryname: String } 字符串字段的索引属性,_all是字符串字段,用于确定是否应分析该字段。

"index": "not_analyzed"用于确定应将哪个分析器用于用户输入的查询,如果将index属性设置为已分析,则该分析器有效。 "search_analyzer"将设置为确定哪个分析器应该用于文档,如果将index属性设置为已分析,则再次有效。