首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索忽略`token_chars`

弹性搜索忽略`token_chars`
EN

Stack Overflow用户
提问于 2015-08-20 21:39:40
回答 1查看 1.4K关注 0票数 2

我在Mac上用弹性搜索1.7.1。

这是我的索引映射:

代码语言:javascript
复制
{
   "settings":{
      "analysis":{
         "filter":{
            "my_edgengram":{
               "max_gram":15,
               "token_chars":[
                  "letter",
                  "digit"
               ],
               "type":"edgeNGram",
               "min_gram":1
            },
         },
         "analyzer":{
            "stop_edgengram_analyzer":{
               "filter":[
                  "lowercase",
                  "asciifolding",
                  "stop",
                  "my_edgengram"
               ],
               "type":"custom",
               "tokenizer":"whitespace"
            }
         }
      }
   }
}

调试分析器:

代码语言:javascript
复制
$ curl -XGET 'http://localhost:9200/objects/_analyze?analyzer=stop_edgengram_analyzer&text=America,s&pretty=True'
{
  "tokens" : [
     ... skipped ...
  , {
    "token" : "america",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "america,",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "america,s",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "word",
    "position" : 1
  } ]
}

为什么america,s令牌在输出中?

,是标点符号。我期望字母和数字只有在token_chars属性中指定的my_edgengram过滤器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 21:47:49

您混淆了ngram令牌器ngram令牌滤波器

来自文件:

托卡器用于将字符串分解为术语或令牌流。

在问题中提供的示例中,whitespace是正在使用的令牌程序。

另一方面,令牌过滤器:

接受来自令牌程序的令牌流,并可以修改令牌(例如低胁迫)、删除令牌(例如删除停止词)或添加令牌(例如同义词)。

在OP中提供的示例中,使用了egde_ngram令牌过滤器。

token_chars不受edge_ngram令牌筛选器的支持,因此被忽略。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32128858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档