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

elsaticsearch 不确定是小数点还是分词的问题

  •  
  •   Dik1s · 2017-08-10 15:51:09 +08:00 · 3596 次点击
    这是一个创建于 2658 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当搜索时,创建数据

    1.2.3.4 a.b.c.d 12.cd

    使用 match 查询,匹配 12.cd 时,12 和 cd 会变成两个单独的词汇进行查询

    使用正则也不能匹配,请问有过相同问题的大佬吗 qwq

    7 条回复    2017-08-11 11:17:45 +08:00
    Dik1s
        1
    Dik1s  
    OP
       2017-08-10 15:58:51 +08:00
    其实我是想匹配短语,用 match_phrase 即可。

    但是还是不明白为什么当我在使用 regexp 的时候 想匹配 2.c 使用正则*2\.c*却匹配不到呢
    dikT
        2
    dikT  
       2017-08-10 16:13:53 +08:00
    对,‘.’很麻烦
    Dik1s
        3
    Dik1s  
    OP
       2017-08-10 18:26:10 +08:00
    @dikT 请问大佬如何能够使用正则匹配数字和字母之间的点呢,虽然现在用 match_phrase 已经满足需求但是如果不用正则还是不舒服 现在我了解到的是使用 regexp 的时候 text 类型会自动将文本进行分词,之所以匹配不到是因为查询的时候压根就没有 360.cn 怎样让他不分词直接匹配文本呢
    fiht
        4
    fiht  
       2017-08-10 18:45:49 +08:00
    楼主搞定了麻烦贴一下解决方案...
    我也有这个需求然而没有搞定.....
    多谢多谢
    w0000
        5
    w0000  
       2017-08-10 19:23:00 +08:00
    "Elasticsearch will apply the regexp to the terms produced by the tokenizer for that field, and not to the original text of the field", es 的正则匹配的是被分词器分词后的 term,不知道你用的啥分词器,反正我用默认分词器把 360.cn 分词之后变成了 360 和 cn,所以是匹配不到的
    zjxzhqq
        6
    zjxzhqq  
       2017-08-11 08:30:25 +08:00 via Android
    索引的时候不分词
    Dik1s
        7
    Dik1s  
    OP
       2017-08-11 11:17:45 +08:00
    @fiht
    这个具体解决方法需要看你的需求,如果你一个 flied 的内容不是很多那你可以选择使用 keyword 然后使用正则进行匹配,这样的话就不会将 text 分词,直接当成一个 string 类型进行匹配。

    @w0000
    嗯,但是如果你有匹配短语需求可以使用 match_phrase,这样的话他会根据分词后的词汇位置识别是否是短语和你查询进行匹配

    @zjxzhqq
    索引的时候是不分词,但是由于我是用的是 es5.4 所以插入文本会被识别为 text 类型,在使用 match 等一系列查询时,内置分词器会将 text 根据自己的匹配进行分词。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3487 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.