【问题标题】:Elasticsearch strange filter behaviourElasticsearch 奇怪的过滤器行为
【发布时间】:2015-07-29 15:22:56
【问题描述】:

我正在尝试替换字段中的特定字符串。所以我使用了自定义分析器和字符过滤器,就像the docs 中描述的那样,但它不起作用。
这是我的索引设置:

{
    "settings": {
        "analysis": {
            "char_filter": {
                "doule_colon_to_space": {
                    "type":       "mapping",
                    "mappings": [ "::=> "]
            }},
            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",
                    "char_filter":  [ "doule_colon_to_space" ],
                    "tokenizer":    "standard"
            }}
}}}

应该用空格替换字段中的所有双冒号 (::)。
然后我更新我的映射以使用分析器:

{
    "posts": {
        "properties": {
          "id": {
            "type": "long"
          },
          "title": {
            "type": "string", 
            "analyzer": "my_analyzer",
            "fields": {
                "simple": {
                    "type": "string", 
                    "index": "not_analyzed"
                }
            }
          }
        }
      }
}

然后我在索引中放了一个文档:

{
    "id": 1, 
    "title": "Person::Bruce Wayne"
}

然后我测试分析器是否工作,但似乎不是 - 当我发送此 https://localhost:/first_test/_analyze?analyzer=my_analyzer&text=Person::Someone+Close 时,我收到了两个令牌 - “PersonSomeone”(一起)和“关闭”。我这样做对吗?也许我应该以某种方式逃离这个空间?我使用 Elasticsearch 1.3.4

【问题讨论】:

  • 您是否希望标记为“Person”、“Someone”和“Close”?
  • @bittusarkar 是的,我愿意

标签: elasticsearch


【解决方案1】:

我认为char_filter 模式中的空格被忽略了。尝试对单个空格使用 unicode 转义序列:

"mappings": [ "::=>\\u0020"]

更新:

对于您的评论,简短的回答是是的,这个例子是错误的。文档确实建议您可以使用映射字符过滤器将一个标记替换为另一个由空格填充的标记,但 the code 不同意。

MappingCharFilterFactory 的源代码使用这个正则表达式来解析设置:

// source => target
private static Pattern rulePattern = Pattern.compile("(.*)\\s*=>\\s*(.*)\\s*$");

此正则表达式匹配(并有效地丢弃)围绕第二个替换标记 ((.*)) 的任何空格 (\\s*),因此您似乎不能将前导或尾随空格用作替换映射的一部分(尽管它可以包括间隙空格)。即使正则表达式不同,匹配的标记也是 trim()ed,它会删除任何前导和尾随空格。

【讨论】:

  • 一定会尝试的。如果可行,是否意味着指南也错了?
  • 是的,我看了一下映射 char_filter 的实现,它肯定不会包含任何前导或尾随空格。如果您有兴趣,请回答更新后的源链接。
  • 它确实有效。多谢。你认为我应该去为文档创建一个拉取请求吗?
  • 是的,或者如果你不介意,我会处理一些事情。
  • 我会做拉取请求,不用担心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多