es 查询,由于用户输入马虎忽略了,忽略了空格

40 天前
 findlisa
输入 AviationTechnology 怎么匹配到 Aviation Technology 这个的,无法理解,但是看有的系统能做到,有大佬答疑解惑吗
2047 次点击
所在节点    程序员
14 条回复
MoYi123
40 天前
是 levenshtein distance 吧, 大概.
Jinnrry
40 天前
自定义一个分词器,然后按字分词就行了。比如这样,查询的时候不同分词器给不同的得分权重

{
"mappings": {
"_doc": {
"properties": {
"name": {
"analyzer": "ik_max_word",
"type": "text",
"fields": {
"pinyin": {
"analyzer": "pinyin",
"type": "text"
},
"char": {
"analyzer": "char_analyzer",
"type": "text"
},
"keyword": {
"type": "keyword"
}
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"char_analyzer": {
"tokenizer": "char_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"char_tokenizer": {
"type": "pattern",
"pattern": ""
}
}
}
}
}
nice2cu
40 天前
分词了吧
akinoowari
40 天前
1.分词的时候用 ngram
2.前缀匹配
NoobNoob030
40 天前
分词实现,输入 AviationTechnology ,分词成 Aviation 和 Technology 两个 token ,然后作为索引去查询
weofuh
40 天前
看新版 8.x 文档有支持类似驼峰分词
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-graph-tokenfilter.html

默认是的标准分词器是按空格、点这些进行分词

另外,好像搜索和构建索引可以使用不同的分词器和过滤器
findlisa
40 天前
@weofuh 感谢好像我看了,全部小写也能匹配到
findlisa
40 天前
@weofuh 不仅仅是针对于驼峰
findlisa
40 天前
@Jinnrry 如果有多语言呢不一定是英文呢有可能还有中文
weofuh
40 天前
如果全小写、中文都能匹配,我能想到的实现方案也就是只有 4 楼的了,用 edge_ngram 分词 和 match_phrase_prefix 前缀匹配查询,只是性能可能不太好,哈哈哈
Latin
40 天前
短语匹配+slop
Jinnrry
40 天前
@findlisa #9 你看我给你这个 demo 里面的分词器,拼音分词器用于模糊搜索,比如简繁,错字,都能匹配
ik 分词器用于中文分词搜索
keyword 用于完全匹配
char_analyzer 的作用和 4 楼说的 ngram 一样,实现方式和结果也完全一样
你可以再加其他语言的分词器就能实现其他语言的召回了。

match 的时候给不同分词器召回增加不同的得分权重,比如拼音分词给 0.1 ,这样能保证模糊搜索结果在最后
findlisa
39 天前
@Jinnrry 好的感谢,我试试看(👀)
findlisa
39 天前
@weofuh 确实 ngram 会分很多词,索引也会大很多🤣

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

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

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

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

© 2021 V2EX