es自定义分词器对数字分词

这篇具有很好参考价值的文章主要介绍了es自定义分词器对数字分词。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:就是一个搜索框,可以输入产品名称、产品code、产品拼音、产品缩写等内容来查询。

问题:就是像产品code这种,比如00034,分词完还是00034,直接查询00是查不到的。

一开始的方案一,就是multi_match产品名称、产品缩写这些,然后前缀查询产品code,然后再should一下。但是前缀查询默认是只查50条,可以通过修改max_expansions增加。

但是不建议,因为前缀查询是全索引扫描,如果查询的结果集要求太大会有性能问题。

所以优化的思路还是在分词这块,让产品code能够按照预想的分词,就需要自定义分词器。

{
    "settings": {
        "index": {
            "number_of_shards": "1",
            "number_of_replicas": "0"
        },
        "index.max_ngram_diff": 6,
        "analysis": {
            "analyzer": {
                "ngram_analyzer": {
                    "tokenizer": "ngram_tokenizer"
                }
            },
            "tokenizer": {
                "ngram_tokenizer": {
                    "type": "edge_ngram",
                    "min_gram": 1,
                    "max_gram": 6,
                    "token_chars": [
                        "letter",
                        "digit"
                    ]
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "dataProductId": {
                    "type": "keyword"
                },
                "endedDate": {
                    "type": "date"
                },
                "endedFlag": {
                    "type": "keyword"
                },
                "firstSpellLetter": {
                    "type": "text",
                    "analyzer": "ik_smart"
                },
                "foundDate": {
                    "type": "date"
                },
                "fullName": {
                    "type": "text",
                    "analyzer": "ik_smart"
                },
                "lastModifyTime": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "liteName": {
                    "type": "text",
                    "analyzer": "ik_smart"
                },
                "offlineDate": {
                    "type": "date"
                },
                "onlineDate": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "onlineStatus": {
                    "type": "keyword"
                },
                "productCode": {
                    "type": "text",
                    "analyzer": "ngram_analyzer"
                },
                "productId": {
                    "type": "keyword"
                },
                "productType": {
                    "type": "keyword"
                },
                "rowHash": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "salesSystemCreateTime": {
                    "type": "date"
                },
                "salesSystemFlag": {
                    "type": "keyword"
                },
                "spell": {
                    "type": "text",
                    "analyzer": "ik_smart"
                }
        }
    }
}

这里我用的是edge_ngram,00034分词结果如下

0 00 000 0003 00034

如果用 ngram,max_ngrm=3,分词结果就是

0 00  000 0 03 003 034 3 34

因为我的需求是左匹配,所以优化一下,用了 edge_ngram

附录:

查询具体某条记录某个字段的分词结果

GET product_info_search/_doc/1011241001/_termvectors?fields=productCodeGET 索引名/type/id/_termvectors?fields=字段名GET product_info_search/_doc/1011241001/_termvectors?fields=productCode

查询对应分词器的分词结果

指定索引的

http://10.105.100.70:9200/product_info_search/_analyze  

全局的

http://10.105.100.70:9200/_analyze


欢迎关注本人公众号“IT小白”,一起交流,一起成长

 文章来源地址https://www.toymoban.com/news/detail-432629.html

到了这里,关于es自定义分词器对数字分词的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(58)
  • 基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery

    之前不是写过一个全局搜索的功能吗,用户在使用的时候,搜(进出口),说搜不到数据,但是 Es 中确实是有一条标题为 (202009 进出口)的数据的,按道理来说,这确实要命中的,于是我开始回想我当时是如何写的这段搜索逻辑的代码!!!! 之前所有检索的字段全

    2024年02月04日
    浏览(38)
  • ElasticSearch关于自定义分词器模糊检索数字+字母

    之前的系统由于一些表的数据已经达到1~2百万行的数据了,而且还在与日俱增,一些条件比较复杂的检索,已经明显感觉到比较慢,影响用户的使用体验。所以引入的ElasiticSearch进行检索优化,效果还是比较好的。因为之前都没有怎么涉及到模糊检索这一块需求,只是为了速

    2024年02月16日
    浏览(36)
  • es在索引中自定义简单的分词器 Analyzer 扩展

    es在索引中自定义简单的分词器 Analyzer 扩展 PUT index1 {   \\\"settings\\\": {     \\\"analysis\\\": {       \\\"analyzer\\\": {         \\\"ik_max_word_expand\\\": {           \\\"type\\\": \\\"custom\\\",           \\\"char_filter\\\": \\\"html_strip\\\",           \\\"tokenizer\\\": \\\"ik_max_word\\\"         }       }     }   } }   在索引中自定义简单的分

    2024年02月15日
    浏览(36)
  • 搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    kibana可以帮助我们方便地编写DSL语句,所以还要装kibana 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提供了镜像的tar包: 大家将

    2024年02月16日
    浏览(58)
  • ElasticSearch的使用,安装ik分词器,自定义词库,SpringBoot整合ES(增、删、改、查)

    保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识(相当于,保存一个数据,保存在那个数据库中的哪个表中,指定主键ID) 例:PUT customer/external/1;在customer索引下的external类型下保存1号数据name为John Doe的数据 POST和PUT都可以新增数据 注意: POST 新增。如果

    2023年04月25日
    浏览(50)
  • 一个线上全文索引BUG的排查:关于类阿拉件数字的分词与检索

    说到全文检索的分词,多半讲到的是中(日韩)文分词,少有英文等拉丁文系语言,因为英语单词天然就是分词的。 但更少讲到阿拉伯数字。比如金额,手机号码,座机号码等等。 以下不是传统的从0开始针对mysql全文索引前世今生讲起。 我更喜欢从一个小问题入手,见缝插针

    2024年02月05日
    浏览(69)
  • 第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi

    DSL查询分类 全文查询、分词查询、非分词查询、地理坐标查询、组合查询 match_all 查询所有,不需要查询条件,固定写法_search 第一个hits就是命中的数据 ,total就是条数,第二个hits是source嘞   全文检索查询 我们不要整多个字段查询,参与的字段越多,查询速度越慢,如果有

    2024年01月16日
    浏览(81)
  • 简洁简约个人导航页引导源码PC手机自适应模板自定义背景以及音乐带后台包学会搜索引擎可收录

    简洁简约个人导航页引导源码PC手机自适应模板自定义背景以及音乐带后台包学会 搜索引擎可收录       获取源码:https://pan.baidu.com/s/1gbnBmL35RhzGuZ5P0Mk7tA?pwd=h06o 提取码:h06o  

    2024年02月07日
    浏览(108)
  • 数字藏品就是NFT吗?

    自去年以来,数字藏品的热潮开始在国内各个领域蔓延开来。 2021年12月,河南博物院发布的文创数字藏品“妇好鸮尊”,售价19.9 元,限量 1万份,一秒内即宣告售罄。 今年3月,中国设计师品牌ANNAKIKI在米兰时装周上,推出了2022秋冬NFT虚拟服饰胶囊系列,并邀请一众女明星晒

    2024年01月25日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包