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

es 搜索问题请教

  •  
  •   reid2017 · 248 天前 · 1811 次点击
    这是一个创建于 248 天前的主题,其中的信息可能已经有所发展或是发生改变。

    索引分词使用 ik_max_word,es 里有些数据是连续的汉字,如
    哈哈哈哈哈哈...

    搜索的时候,输入 [哈哈] 或 [哈哈哈] 或 [哈哈哈哈] 一般能搜索到,但如果搜索单个字 [哈] ,却搜索不到。

    同样的,有一串数字字符 [ 1111 ] ,只能用 [ 1111 ] 搜索到, [ 1 ] [ 11 ] [ 111 ] 都搜索不到。

    有没有大佬给点思路如何解决?

    12 回复  |  直到 2019-04-03 12:11:01 +08:00
        1
    misaka19000   248 天前 via Android
    先看一下分词的结果是什么,看这个句子被分成了哪些词
        2
    rogwan   248 天前
    你这个的结果像是 ik_smart 索引的,不像是 ik_max_word 出来的结果啊。你换个分词重新索引一下试试
        3
    reid2017   248 天前
    @misaka19000
    @rogwan
    我用 analyze 接口分析出来的也是只有 [哈哈] ,所以是不是我哪里配置不对

        4
    reid2017   248 天前
    es 版本:6.5.1
        5
    reid2017   248 天前
    三个字 [哈哈哈] 也是没有单字 [哈]

        6
    lawler   248 天前
    哈,不是词。

    意思就是,你的词库里没有哈。
        7
    qping   248 天前   ♥ 1
    比如“你好,您的发票号是 11111 ”,经过分词器,把 “ 11111 ” 分成了一个词,建立倒排索引,然后“ 11111 ”就可以搜到了。 “ 1 ” 搜不到是因为没有分出 “ 1 ” 这个词,如果所有单个词都建索引,索引会特别大。你可以考虑下你的需求,真的需要 输入“ 1 ” 搜到所有文档吗。
    1、能不能输入“ 1 ”时出现下拉框,做联想提醒呢,给用户推荐一些热门的关键词。比如淘宝搜索“女”,会出现下拉列表:“女装”、“女鞋”、“女包”
    2、对数字或者文字按建立索引,比如 “ 1234 ” 分词为 "12" "23" "34",减少索引的量,同时搜索的时候输入 "12" 也能够得到相关的结果
    3、实在不行,可以模糊搜索
        8
    reid2017   248 天前
    @lawler 好像懂了。。
        9
    qping   248 天前
    @reid2017 #5 你的词典里,就没有“哈” 这个词
        10
    reid2017   248 天前
    @qping 谢谢,大概明白了
        11
    leriou   248 天前
    不管是 ik_smart 还是 ik_max_word 都不会把 哈 单独做分词, es 单个字段可以配置多个分词器, 在配置个标准分词器就可以了, 搜索的时候同时搜索多个分词字段, 权重自己调一下就行了
        12
    reid2017   248 天前
    @qping
    字典里应该是 [哈] 的,因为另外一些数据,比如 [xxxxx 哈 xxxxx] ,这样的一长串字符里只有一个 [哈] 字,搜索单字 [哈] 时能搜索出来,只是匹配不出有连字的 [哈] 的内容,这是为什么呢?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   855 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 22:24 · PVG 06:24 · LAX 14:24 · JFK 17:24
    ♥ Do have faith in what you're doing.