首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用word_delimiter和edgeNGram将忽略Word_Delimiter令牌

使用word_delimiter和edgeNGram将忽略Word_Delimiter令牌
EN

Stack Overflow用户
提问于 2016-03-08 13:03:42
回答 1查看 530关注 0票数 2

我有我的自定义分析器如下。但我不明白如何实现我的目标。

我的目标是,我希望有空格分隔倒排索引,但我也想有自动完成功能后,用户进入最小3个字符。为此,我想将word_delimiter和edgeNGram令牌组合如下

代码语言:javascript
复制
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_analyzer": {
            "tokenizer": "whitespace",
            "filter": [
              "standard",
              "lowercase",
              "my_word_delimiter",
              "my_edge_ngram_analyzer"
            ],
            "type": "custom"
          }
        },
        "filter": {
          "my_word_delimiter": {
            "catenate_all": true,
            "type": "word_delimiter"
          },
          "my_edge_ngram_analyzer": {
            "min_gram": 3,
            "max_gram": 10,
            "type": "edgeNGram"
          }
        }
      }
    }
  }
}

这将给出“TN-200兄弟”的结果如下。但我预计“万亿”也会出现在恢复索引中,因为我有word_delimiter令牌。为什么它不在倒排指数中呢?我怎样才能做到这一点?

代码语言:javascript
复制
curl -XGET "localhost:9200/myIndex/_analyze?analyzer=my_analyzer&pr
    etty=true" -d "Brother TN-200"
    {
      {
        "token" : "bro",
        "start_offset" : 14,
        "end_offset" : 21,
        "type" : "word",
        "position" : 2
      }, {
        "token" : "brot",
        "start_offset" : 14,
        "end_offset" : 21,
        "type" : "word",
        "position" : 2
      }, {
        "token" : "broth",
        "start_offset" : 14,
        "end_offset" : 21,
        "type" : "word",
        "position" : 2
      }, {
        "token" : "brothe",
        "start_offset" : 14,
        "end_offset" : 21,
        "type" : "word",
        "position" : 2
      }, {
        "token" : "brother",
        "start_offset" : 14,
        "end_offset" : 21,
        "type" : "word",
        "position" : 2
      }, {
        "token" : "tn2",
        "start_offset" : 22,
        "end_offset" : 28,
        "type" : "word",
        "position" : 3
      }, {
        "token" : "tn20",
        "start_offset" : 22,
        "end_offset" : 28,
        "type" : "word",
        "position" : 3
      }, {
        "token" : "tn200",
        "start_offset" : 22,
        "end_offset" : 28,
        "type" : "word",
        "position" : 3
      }, {
        "token" : "200",
        "start_offset" : 25,
        "end_offset" : 28,
        "type" : "word",
        "position" : 4
      }]
    }

更新:

当然,如果我使用"min_gram":2,"tn“将出现在还原索引中,但我不想这样做,因为如果该单词中有任何其他单词包含"tn”,则它将出现在结果列表中。

例如,关于"hp“关键字。我得到的产品为“惠普”,因为我的产品像“惠普xxx”,但我也得到了一个产品,称为“高科技hpc”。我不希望这个产品被显示,直到我键入“高性能”。这就是我设定3的原因。

如果我不使用edgeNGram令牌程序,而只使用word_delimiter,则" tn“在倒排索引中,因为兄弟TN-200将被索引为兄弟、tn和200。这就是为什么我预计word_delimiter会将“万亿”指数倒置在指数中。如果我和edgeNGram一起用它没有用吗?-

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-08 15:00:22

my_edge_ngram_analyzer中,min_gram设置为3,因此,任何长度小于3个代码点的令牌都不会出现。如果希望TN出现,则需要将其设置为2。

示例:

代码语言:javascript
复制
get <my_index>/_analyze?tokenizer=whitespace&filters=my_edge_ngram_analyzer&text=TN

上面的调用将返回0令牌。

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

https://stackoverflow.com/questions/35868172

复制
相关文章

相似问题

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