Stannum,我想请教中文分词全文检索的问题

来源:9-6 【分片】不一样的查询 - 分片查询

非同凡想之人

2020-03-05

英文的模糊查询

我现在遇到了一个场景,就是中文的,比如 我以 name 建立索引。

db.stores.insert(
   [
     { _id: 1, name: "玩转mongo数据库", description: "Coffee and cakes" },
     { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
     { _id: 3, name: "Coffee Shop", description: "Just coffee" },
     { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
     { _id: 5, name: "Java Shopping", description: "Indonesian goods" }
   ]
)
db.stores.createIndex( { name: "text" } )

我希望如下语句就能匹配到所有正确结果:

db.stores.find( { $text: { $search: "\"数据库\"" } } )

可实际上,这个语句一个结果也查找不出来。

写回答

1回答

Stannum

2020-03-15

同学你好~mongodb对中文进行文本检索的困难主要在于中文的分词...西方语言的词汇之间往往都有一个空格来做天然的区分,但是中文没有...这就是为什么你上面这个搜索无法返回结果,因为你实际上是进行了一个分词的搜索,而不是完全的匹配。如果你用完整的关键词,"玩转mongo数据库",来进行搜索,应该是可以返回这篇文档的。

所以,如果你要进行较为复杂灵活的中文文本搜索,我建议使用mongodb以外的技术(比如将数据由mongodb推到elasticsearch引擎里进行搜索)

当然了,如果一定要用mongodb搜索,还有一个“笨”办法,就是你可以人工分词...在数据中的词与词之间加上空格,比如说:{ _id: 1, name: "玩转 mongo 数据库", description: "Coffee and cakes" }。这个方法的局限性显而易见...我只是说一下供你参考而已~


1
1
非同凡想之人
非常感谢!我试过了,只能Elasticsearch
2020-03-27
共1条回复

玩转MongoDB4.0(最新版) 从入门到实践

30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课

1138 学习 · 197 问题

查看课程