在elasticsearch中使用前缀查询来表示整数字段

时间:2014-05-08 08:16:55

标签: elasticsearch

我正在尝试使用前缀查询来返回可能匹配的列表。前缀字段是未分析的整数。我希望如此:

{
"prefix": {"id":"1"} 
}

将返回id以1开头的所有文档(例如1,10,11,12,13等)。但是,它只返回完全匹配(例如1)。

前缀查询是否适用于整数字段?

1 个答案:

答案 0 :(得分:0)

我还在学习弹性搜索,但我相信这个领域必须是一个字符串。您可以通过使用multi_field类型并添加可以运行前缀查询的字符串字段来解决此问题。我对以下运行前缀查询所需的许多字段(整数和非整数)使用以下内容:

在地图中的settings.analysis下,添加:

  "analyzer": {
    "str_filtered_search_analyzer": {
      "tokenizer": "keyword",
      "filter": [
        "lowercase"
      ]
    },
    "str_prefix_analyzer": {
      "tokenizer": "keyword",
      "filter": [
        "lowercase",
        "prefix"
      ]
    }
  }

然后在mappings.type.properties下(用您的类型替换类型,例如用户):

  "id": {
    "type": "multi_field",
    "fields": {
      "id": {
        "type": "integer"
      },
      "prefix": {
        "type": "string",                
        "index_analyzer": "str_prefix_analyzer",
        "search_analyzer": "str_filtered_search_analyzer"
      }
    }
  }