弹性搜索:查询不搜索数值

时间:2017-01-12 10:14:22

标签: elasticsearch

我有一个字段,我存储的值如O5467508(以字母开头" O")

以下是我的查询。

{"from":0,"size":10,"query":{"bool":{"must":[{"match":{"field_LIST_105":{"query":"o5467508","type":"phrase_prefix"}}},{"bool":{"must":[{"match":{"RegionName":"Virginia"}}]}}]}}}

它给了我正确的结果,但是当我只搜索数值" 5467508"时,查询结果为空。

提前致谢。

1 个答案:

答案 0 :(得分:1)

可以帮助您使用word_delimiter过滤器和preserve_original选项的可能解决方案之一,它将保存原始令牌。

这样的事情:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "so_analyzer": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [
            "lowercase",
            "my_word_delimiter"
          ]
        }
      },
      "filter": {
        "my_word_delimiter": {
          "type": "word_delimiter",
          "preserve_original": true
        }
      }
    }
  },
  "mappings": {
    "my_type": {
      "properties": {
        "field_LIST_105": {
          "type": "text",
          "analyzer": "so_analyzer"
        }
      }
    }
  }
}

我做了一个快速的分析测试,这是它给我的代币。

{
    "tokens": [
        {
            "token": "o5467508",
            "start_offset": 0,
            "end_offset": 8,
            "type": "word",
            "position": 0
        },
        {
            "token": "o",
            "start_offset": 0,
            "end_offset": 1,
            "type": "word",
            "position": 0
        },
        {
            "token": "5467508",
            "start_offset": 1,
            "end_offset": 8,
            "type": "word",
            "position": 1
        }
    ]
}

有关详情,请访问https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html