哪种分析器可以满足我在Elasticsearch中的需求?

时间:2018-10-27 02:31:36

标签: elasticsearch

在我的情况下,我的字段就像“ abc,123”,我希望可以在“ abc”或“ 123”中进行搜索。 我的索引映射就像下面的代码

{
"myfield": {
   "type": "text",
   "analyzer": "stop",
   "search_analyzer": "stop"                }

但是当我使用es _analyzer API进行测试时,我得到了结果

{
    "tokens": [
        {
            "token": "abc",
            "start_offset": 0,
            "end_offset": 3,
            "type": "word",
            "position": 0
        }
    ]
}

“ 123”丢失了。 如果我想满足自己的情况,是否需要选择其他分析仪还是仅添加一些特殊配置?

1 个答案:

答案 0 :(得分:2)

您需要选择standard分析器,因为stop分析器在遇到非字母的字符时会将文本分解为多个词,并删除“ the”之类的停用词。在您的情况下,使用停止分析器时,“ abc,123”导致令牌abc。使用标准分析器,它会返回abc和123,如下所示:

POST _analyze
{
  "analyzer": "standard",
  "text": "abc, 123"
}

输出:

{
  "tokens": [
    {
      "token": "abc",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "123",
      "start_offset": 5,
      "end_offset": 8,
      "type": "<NUM>",
      "position": 1
    }
  ]
}

EDIT1 使用简单模式拆分标记器

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "simple_pattern_split",
          "pattern": ","
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "abc,123"
}

输出:

{
  "tokens": [
    {
      "token": "abc",
      "start_offset": 0,
      "end_offset": 3,
      "type": "word",
      "position": 0
    },
    {
      "token": "123",
      "start_offset": 4,
      "end_offset": 7,
      "type": "word",
      "position": 1
    }
  ]
}