【问题标题】:Elasticsearch use Char Filter in Analyzer to remove all characters after a "?"Elasticsearch 在 Analyzer 中使用 Char 过滤器来删除“?”之后的所有字符
【发布时间】:2018-10-21 19:25:45
【问题描述】:

在弹性搜索中,我试图在字段上使用分析器,该分析器将使用过滤器替换 ? 之后的所有字符遇到空格。为此,我使用了以下过滤器。

"filter_name":{
  "type": "pattern_replace",
  "pattern": "\\?(.*)",
  "replacement": ""
}

但这并没有按预期工作。我有什么遗漏吗?

【问题讨论】:

    标签: elasticsearch elastic-stack


    【解决方案1】:

    使用模式:"(?<=\\?)(.*)" 和替换:""

    【讨论】:

    • 编辑了我的答案,现在试试?
    【解决方案2】:

    请看下文。我创建了一个示例映射和一个示例 _analyze 查询,以查看令牌是如何创建的。

    映射

    PUT my_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "standard",
              "char_filter": [
                "my_char_filter"
              ]
            }
          },
          "char_filter": {
            "my_char_filter": {
              "type": "pattern_replace",
              "pattern": "(?=.*)\\?(.*)",
              "replacement": ""
            }
          }
        }
      }
    }
    

    查询

    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "Do you know? Life is crazy"
    }
    

    分析结果

    {
      "tokens": [
        {
          "token": "Do",
          "start_offset": 0,
          "end_offset": 2,
          "type": "<ALPHANUM>",
          "position": 0
        },
        {
          "token": "you",
          "start_offset": 3,
          "end_offset": 6,
          "type": "<ALPHANUM>",
          "position": 1
        },
        {
          "token": "know",
          "start_offset": 7,
          "end_offset": 26,
          "type": "<ALPHANUM>",
          "position": 2
        }
      ]
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2020-02-01
      • 1970-01-01
      相关资源
      最近更新 更多