模式捕获不适用于正斜杠

ParthS007

我在这样的记录中有一个字段:

{ 
  ....

  "test_field": "/xyz/abc-2021abs/drf/2021ABC"

  ....
}

我正在创建一个分析器,以/pattern_capture的帮助下不忽略正斜杠(

这是我的映射和分析器。

{
    "mappings": {
      "properties": {
        "test_field": {
          "type": "text",
          "analyzer": "test_field_analyzer",
          "fields": {
            "exact": {
              "type": "keyword"
            }
          }
        }
      }
    },
    "settings": {
      "analysis": {
        "analyzer": {
          "test_field_analyzer": {
            "tokenizer" : "pattern",
            "filter" : [ "test_filter"]
          }
        },
        "filter" : {
            "test_filter" : {
               "type" : "pattern_capture",
               "preserve_original" : true,
               "patterns" : ["(\\p{Punct}+\\p{Alnum})"]
            }
         }
      }
    }
  }

当我检查生成的令牌时,正斜杠(/)将被忽略,并且模式捕获似乎不像pattern_capture上的示例那样工作

请让我知道我在哪里做错了。

乔·索罗辛

我不确定那些类似Java的\\p模式,但这

{
  "mappings": {
    "properties": {
      "test_field": {
        "type": "text",
        "analyzer": "test_field_analyzer",
        "fields": {
          "exact": {
            "type": "keyword"
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "test_field_analyzer": {
          "tokenizer": "keyword",
          "filter": [
            "test_filter"
          ]
        }
      },
      "filter": {
        "test_filter": {
          "type": "pattern_capture",
          "preserve_original": false,
          "patterns": [
            "(/[a-zA-Z-_0-9]+)"
          ]
        }
      }
    }
  }
}

将标记测试字段为

["/xyz", "/abc-2021abs", "/drf", "/2021ABC"]

如果那是你所追求的...

编辑

有一种使用自定义模式标记器而不是pattern_capture 过滤器实现此目的的更简单方法

{
  "mappings": {
    "properties": {
      "test_field": {
        "type": "text",
        "analyzer": "test_field_analyzer",
        "fields": {
          "exact": {
            "type": "keyword"
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "test_field_analyzer": {
          "type": "custom",
          "tokenizer": "my_pattern_tokenizer"
        }
      },
      "tokenizer": {
        "my_pattern_tokenizer": {
          "type": "pattern",
          "pattern": "(/[a-zA-Z-_0-9]+)",
          "group": 1
        }
      }
    }
  }
}

由于您正在处理路径,因此您可能会发现路径层次标记器也很有用:

{
  "mappings": {
    "properties": {
      "test_field": {
        "type": "text",
        "analyzer": "test_field_analyzer",
        "fields": {
          "exact": {
            "type": "keyword"
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "test_field_analyzer": {
          "tokenizer": "path_hierarchy"
        }
      }
    }
  }
}

将产生

["/xyz", "/xyz/abc-2021abs", "/xyz/abc-2021abs/drf", "/xyz/abc-2021abs/drf/2021ABC"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章