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

2017-08-10 15:51:09 +08:00
 Dik1s

当搜索时,创建数据

1.2.3.4 a.b.c.d 12.cd

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

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

3599 次点击
所在节点    Elasticsearch
7 条回复
Dik1s
2017-08-10 15:58:51 +08:00
其实我是想匹配短语,用 match_phrase 即可。

但是还是不明白为什么当我在使用 regexp 的时候 想匹配 2.c 使用正则*2\.c*却匹配不到呢
dikT
2017-08-10 16:13:53 +08:00
对,‘.’很麻烦
Dik1s
2017-08-10 18:26:10 +08:00
@dikT 请问大佬如何能够使用正则匹配数字和字母之间的点呢,虽然现在用 match_phrase 已经满足需求但是如果不用正则还是不舒服 现在我了解到的是使用 regexp 的时候 text 类型会自动将文本进行分词,之所以匹配不到是因为查询的时候压根就没有 360.cn 怎样让他不分词直接匹配文本呢
fiht
2017-08-10 18:45:49 +08:00
楼主搞定了麻烦贴一下解决方案...
我也有这个需求然而没有搞定.....
多谢多谢
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
2017-08-11 08:30:25 +08:00
索引的时候不分词
Dik1s
2017-08-11 11:17:45 +08:00
@fiht
这个具体解决方法需要看你的需求,如果你一个 flied 的内容不是很多那你可以选择使用 keyword 然后使用正则进行匹配,这样的话就不会将 text 分词,直接当成一个 string 类型进行匹配。

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

@zjxzhqq
索引的时候是不分词,但是由于我是用的是 es5.4 所以插入文本会被识别为 text 类型,在使用 match 等一系列查询时,内置分词器会将 text 根据自己的匹配进行分词。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX