Elasticsearch 字符串“ABABABABABAB”适合用什么分析器?

1、一段字符串ABABABABABAB尝试了standard simple ik english分析器,如果进以字符串A或AB或者ABAB等跟原字符串不匹配的字符去搜索,都搜不到内容,只有跟原字符串一致如“ABABABABABAB”才能搜到内容。

2、例子如下:

mapping:
    

clipboard.png

插入数据:

clipboard.png

_search:

clipboard.png

根据field查数据:

clipboard.png
以上,希望各位朋友能帮忙指正是否有问题,或者推荐使用哪个分析器,非常感谢!

阅读 2.8k
2 个回答

额,我目前的解决方案是将英文字符串最大的token长度设定为2,也就是分析器的max_token_length参数,这样如“ABABABABAB”字符串就会拆分成5个为“AB”的token,如下是我索引中的自定义分析器及其属性,有需求的同学可以参考:

PUT /goods
{
"settings": {

"analysis": {
  "analyzer": {
    "my_analyzer": {
      "type": "standard",
      "max_token_length": 2,
      "stopwords": "_english_"
    }
  }
}

},
"mappings": {

  "fruit": {
    "properties": {
      "name": {
        "type": "string",
        "analyzer":"my_analyzer", 
        "search_analyzer":"my_analyzer"
      }
    }
  }
}

}

你的需求应该是子串匹配。ABABABABA这样的内容,es会分成一个词,在倒排索引中,就只有ABABABAB,而没有A/AB/ABAB,所以你搜不到。两个方法:(1)自己实现分词器,但是就这个情况可能会出现太多词了,不可取 (2)使用es的API,用子串搜索或前缀搜索。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进