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

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

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

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

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

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

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

    正确的配置查询的分词会把分成 演 相 两个词去查。
        9
    zzl22100048   73 天前
    同一个字段做个 field 用 standard 分词
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1971 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 16:03 · PVG 00:03 · LAX 08:03 · JFK 11:03
    ♥ Do have faith in what you're doing.