如何在elasticsearch中为一个字段配置多个分析器?

时间:2017-04-03 06:42:12

标签: elasticsearch elasticsearch-analyzers

我正在尝试将路径层次结构分析器添加到我的类型中的一个字段中。

我想在同一个字段上配置路径分析器和​​反向路径分析器,这样我就可以获得一个字段的正常路径和反向路径。

例如。

路径=" /角度/指令/结构"

我想配置这个路径字段,例如每当我分析这个字段时,如果我指定反向,我应该按正常顺序获取令牌并反转顺序。

以下是我的映射。

PUT /elastic_course
{
  "settings": {
    "analysis": {
      "analyzer": {
        "path_analyzer": {
          "tokenizer": "path_tokenizer"
        },
        "reverse_path_analyzer": {
          "tokenizer": "reverse_path_tokenizer"
        }
      },
      "tokenizer": {
        "path_tokenizer": {
          "type": "path_hierarchy",
          "delimiter": "/",
          "replacement": "-"
        },
        "reverse_path_tokenizer": {
          "type": "path_hierarchy",
          "delimiter": "/",
          "replacement": "-"
        }
      }
    }
  },
  "mappings": {
    "book" : {
        "properties": {
           "author": {
              "type": "string",
              "index": "not_analyzed"
           },
           "genre": {
              "type": "string",
              "index": "not_analyzed"
           },
           "score": {
              "type": "double"
           },
           "synopsis": {
              "type": "string",
              "index":"analyzed",
              "analyzer":"english"
           },
           "title": {
              "type": "string"
           },
           "path":{
              "type":"string",
              "analyzer":"path_analyzer",
              "fields": {
                "reverse": {
                  "type":"string",
                  "analyzer":"reverse_path_analyzer"
                }
              }
          }
      }
    }
  }
}

我配置了这个分析仪。现在如何获取路径和反向路径的令牌?

感谢。

1 个答案:

答案 0 :(得分:4)

您可以声明path字段的子字段,每个字段都有不同的分析器:

       "path":{
          "type":"string",
          "analyzer":"path_analyzer",
          "fields": {
            "reverse": {
              "type":"string",
              "analyzer":"reverse_path_analyzer"
            }
          }
       }

然后,您可以在查询中引用pathpath.reverse