V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
findlisa
V2EX  ›  程序员

es 查询,由于用户输入马虎忽略了,忽略了空格

  •  
  •   findlisa · 101 天前 via iPhone · 2126 次点击
    这是一个创建于 101 天前的主题,其中的信息可能已经有所发展或是发生改变。
    输入 AviationTechnology 怎么匹配到 Aviation Technology 这个的,无法理解,但是看有的系统能做到,有大佬答疑解惑吗
    14 条回复    2024-08-20 18:29:50 +08:00
    MoYi123
        1
    MoYi123  
       101 天前
    是 levenshtein distance 吧, 大概.
    Jinnrry
        2
    Jinnrry  
       101 天前
    自定义一个分词器,然后按字分词就行了。比如这样,查询的时候不同分词器给不同的得分权重

    {
    "mappings": {
    "_doc": {
    "properties": {
    "name": {
    "analyzer": "ik_max_word",
    "type": "text",
    "fields": {
    "pinyin": {
    "analyzer": "pinyin",
    "type": "text"
    },
    "char": {
    "analyzer": "char_analyzer",
    "type": "text"
    },
    "keyword": {
    "type": "keyword"
    }
    }
    }
    }
    }
    },
    "settings": {
    "analysis": {
    "analyzer": {
    "char_analyzer": {
    "tokenizer": "char_tokenizer",
    "filter": [
    "lowercase"
    ]
    }
    },
    "tokenizer": {
    "char_tokenizer": {
    "type": "pattern",
    "pattern": ""
    }
    }
    }
    }
    }
    nice2cu
        3
    nice2cu  
       101 天前
    分词了吧
    akinoowari
        4
    akinoowari  
       101 天前
    1.分词的时候用 ngram
    2.前缀匹配
    NoobNoob030
        5
    NoobNoob030  
       101 天前
    分词实现,输入 AviationTechnology ,分词成 Aviation 和 Technology 两个 token ,然后作为索引去查询
    weofuh
        6
    weofuh  
       101 天前
    看新版 8.x 文档有支持类似驼峰分词
    https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-graph-tokenfilter.html

    默认是的标准分词器是按空格、点这些进行分词

    另外,好像搜索和构建索引可以使用不同的分词器和过滤器
    findlisa
        7
    findlisa  
    OP
       101 天前 via iPhone
    @weofuh 感谢好像我看了,全部小写也能匹配到
    findlisa
        8
    findlisa  
    OP
       101 天前 via iPhone
    @weofuh 不仅仅是针对于驼峰
    findlisa
        9
    findlisa  
    OP
       101 天前 via iPhone
    @Jinnrry 如果有多语言呢不一定是英文呢有可能还有中文
    weofuh
        10
    weofuh  
       101 天前
    如果全小写、中文都能匹配,我能想到的实现方案也就是只有 4 楼的了,用 edge_ngram 分词 和 match_phrase_prefix 前缀匹配查询,只是性能可能不太好,哈哈哈
    Latin
        11
    Latin  
       101 天前
    短语匹配+slop
    Jinnrry
        12
    Jinnrry  
       101 天前   ❤️ 1
    @findlisa #9 你看我给你这个 demo 里面的分词器,拼音分词器用于模糊搜索,比如简繁,错字,都能匹配
    ik 分词器用于中文分词搜索
    keyword 用于完全匹配
    char_analyzer 的作用和 4 楼说的 ngram 一样,实现方式和结果也完全一样
    你可以再加其他语言的分词器就能实现其他语言的召回了。

    match 的时候给不同分词器召回增加不同的得分权重,比如拼音分词给 0.1 ,这样能保证模糊搜索结果在最后
    findlisa
        13
    findlisa  
    OP
       101 天前 via iPhone
    @Jinnrry 好的感谢,我试试看(👀)
    findlisa
        14
    findlisa  
    OP
       101 天前 via iPhone
    @weofuh 确实 ngram 会分很多词,索引也会大很多🤣
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:37 · PVG 18:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.