在 elasticsearch 索引中插入一个文档并让分析器对其进行分析

Insert a document in an elasticsearch index and have it analysed by the analyser

我定义了一个分析器,例如:

PUT /train-music
{
  "settings": {
    "analysis": {
      "analyzer": {
        "music_analyser": {
          "filter": [
            "lowercase",
            "snowball"
          ],
          "type": "custom",
          "tokenizer": "standard"
        }
      }
    }
  }
}

我的火车音乐索引的映射是这样的:

PUT /train-music/_mapping/music
{
  "properties": {
    "instruments": {
      "type": "string",
      "analyzer": "music_analyser"
    }
  }
}

那我要插入一个文档:

POST /train-music/music/1
{
 "id": 1452,
 "style": "rock",
 "instruments":"battery, electric guitar, guitar, piano"
 }

我期待类似的东西(我伪造了词干化):

{ "id": 1452, "style": "rock", "instruments":"batter, electr, guit, guit, pian" }

但是当我执行此操作时:GET /train-music/music/1 我没有让我的工具字段很好地标记化和词干化,而是得到了与我的输入相同的东西。我应该怎么做才能让我的分析器在我想要索引的文档上工作,当我想要索引我的文档时我应该添加一些东西吗?

你不应该做任何事情,这是由 Elasticsearch 在幕后完成的。如果你想查看哪些术语实际上被索引了,你可以使用

GET /train-music/music/_search
{
  "fielddata_fields": ["instruments"]
}

即使在建立索引之前,您也可以使用 _analyze API:

检查分析器是否正常工作
GET /train-music/_analyze
{
  "analyzer" : "music_analyser",
  "text" : "battery, electric guitar, guitar, piano"
}