【问题标题】:Correct analyzer for a field with backslash带有反斜杠的字段的正确分析器
【发布时间】:2026-01-03 19:05:01
【问题描述】:

因此,我正在尝试使用正确的分析器为 Windows 凭据字段设置新的索引映射,其格式为 domain\username

我希望能够搜索域、用户名和域\用户名。但是默认分析器似乎忽略了反斜杠(意思是,如果我尝试搜索域\用户名,它将搜索“域或用户名”而忽略反斜杠),如果我尝试使用空格分析器,它似乎只匹配域\用户名。

有什么建议吗?

【问题讨论】:

  • 您可以添加您的查询
  • 对不起,jaspreet,这实际上不是关于进行查询,而是关于建立索引;)

标签: elasticsearch elasticsearch-analyzers


【解决方案1】:

您可以使用路径层次标记器,将反斜杠设置为分隔符 - doc here 试试:

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "custom_path_tree": {
          "tokenizer": "custom_hierarchy"
        },
        "custom_path_tree_reversed": {
          "tokenizer": "custom_hierarchy_reversed"
        }
      },
      "tokenizer": {
        "custom_hierarchy": {
          "type": "path_hierarchy",
          "delimiter": "\"
        },
        "custom_hierarchy_reversed": {
          "type": "path_hierarchy",
          "delimiter": "\",
          "reverse": "true"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "file_path": {
        "type": "text",
        "fields": {
          "tree": {
            "type": "text",
            "analyzer": "custom_path_tree"
          },
          "tree_reversed": {
            "type": "text",
            "analyzer": "custom_path_tree_reversed"
          }
        }
      }
    }
  }
}
POST my_index/_analyze
{
  "analyzer": "custom_path_tree",
  "text": "C:\Windows\Users"
}

【讨论】:

  • Oooooohhhhh 我迫不及待地测试它,这似乎会完美地工作!
  • 嗯...不走运。当我尝试搜索“域\用户名”时,它返回正确的域,但似乎不查找用户名。然后,如果我尝试搜索特定用户名,则不会返回任何内容 =(
  • 啊好吧,看看我之前评论中的例子,你应该将反向参数设置为 true。我会更新我的答案