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

[求助]ik_smart 分词导致的查询问题

  •  
  •   foxyier · 2019-09-03 17:27:54 +08:00 · 4292 次点击
    这是一个创建于 1898 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境描述: 某字段采用了 ik_smart 分词, 存储数据为中文

    问题描述: 欲查询该字段数据为"上演相亲戏"时, 使用 match 及 match_phrase 查询"相亲", 可以正常查询, 而查询"演相"时, 则无法查询到数据, 通过 termvectors 查询得出"相亲"被分为一个词

    需求描述: 希望了解是否有查询语句可以通过查询"演相"来获取上述"上演相亲戏"数据

    9 条回复    2019-09-03 21:11:00 +08:00
    madNeal
        1
    madNeal  
       2019-09-03 17:32:55 +08:00
    分词的时候就是那样分词的呀,“演相”就不可能存在一个字段里面,除非你查单个字吧
    foxyier
        2
    foxyier  
    OP
       2019-09-03 17:36:04 +08:00
    @madNeal 是的, 所以想问一下, 有没有特殊的办法, 能暂时在本次查询时, 使分词失效。
    fifa666
        3
    fifa666  
       2019-09-03 17:44:00 +08:00
    应该不行吧,倒排索引都已经创建好了
    optional
        4
    optional  
       2019-09-03 17:47:49 +08:00
    有这个需求,应该用 standard 分词器。
    当然妥协方案是建立 2 个字段,一个用 ik_smart 一个 用 standard,搜索的时候按需选择
    misaka19000
        5
    misaka19000  
       2019-09-03 17:54:38 +08:00
    简单,用 like 查询
    XJohn
        6
    XJohn  
       2019-09-03 18:03:44 +08:00 via iPhone
    建索引的时候分词用 ik_max,搜索的时候分词用 ik_smart
    zisway
        7
    zisway  
       2019-09-03 19:06:44 +08:00
    可以使用 wildcard 语句来查询,不过如果是类似于数据库的%XXX%,性能不太好。
    还有一种,可以使用 ngram 分词,根据需求确定好 min 和 max,不建议 max 与 min 的 diff 太大。分词后,就能使用 match 等直接查询到数据。
    rrfeng
        8
    rrfeng  
       2019-09-03 19:08:52 +08:00 via Android
    你要搞清楚分词在两个地方运行:
    索引存储
    查询内容

    正确的配置查询的分词会把分成 演 相 两个词去查。
    zzl22100048
        9
    zzl22100048  
       2019-09-03 21:11:00 +08:00
    同一个字段做个 field 用 standard 分词
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4453 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:07 · PVG 12:07 · LAX 20:07 · JFK 23:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.