0

我想添加一个 custom phonetic analyzer,也不想分析我给定的字符串。假设,我有两个字符串,

卡姆鲁伊斯兰

卡姆拉尔伊斯兰教

我不想使用查询字符串获得任何结果,KAMRUL但希望两者都作为查询字符串的结果KAMRUL ISLAM

为此,我采用了一个带有keyword分词器的自定义语音分析器。

索引设置:

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "dbl_metaphone": { 
            "tokenizer": "keyword",
          "type":    "phonetic",
          "encoder": "double_metaphone"
        }
      },
      "analyzer": {
        "dbl_metaphone": {
          "tokenizer": "keyword",
          "filter":    "dbl_metaphone" 
        }
      }
    }
  }
} 

类型映射:

PUT /my_index/_mapping/my_type
{
  "properties": {
    "name": {
        "type":     "string",
        "analyzer": "dbl_metaphone"
      }
    }
}

我已插入数据:

PUT /my_index/my_type/5
{
  "name": "KAMRUL ISLAM"
}

我的查询字符串:

GET /my_index/my_type/_search
{
  "query": {
    "match": {
      "name": {
        "query": "KAMRAL"
      }
    }
  }
}

不幸的是,我得到了两个字符串。我正在使用 ES-1.7.1。有没有办法解决这个问题?

另外,虽然我跑了

curl -XGET 'localhost:9200/my_index/_analyze?analyzer=dbl_metaphone' -d 'KAMRUL ISLAM'

我得到了结果:

{
  "tokens": [
    {
      "token": "KMRL",
      "start_offset": 0,
      "end_offset": 12,
      "type": "word",
      "position": 1
    }
  ]
}

并且在运行时:

curl -XGET 'localhost:9200/my_index/_analyze?analyzer=dbl_metaphone' -d 'KAMRAL'

我有:

{
  "tokens": [
    {
      "token": "KMRL",
      "start_offset": 0,
      "end_offset": 6,
      "type": "word",
      "position": 1
    }
  ]
}
4

0 回答 0