mongodb全文搜索策略

时间:2012-02-07 15:55:17

标签: mongodb elasticsearch

我们正在尝试开发一种策略,使用elasticsearch在我们的mongodb实例上进行全文搜索。似乎我们想要用作过滤器的每个键都必须包含在弹性索引中。我们可能希望将mongo中的每个密钥用作过滤器 - 即对描述进行全文搜索,按日期和电话号码进行过滤。有没有人有任何真实的经验可以将mongo全文添加到他们可以分享的内容中?

也许我们可以将elasticsearch用作db?

2 个答案:

答案 0 :(得分:14)

我认为没有理由将ElasticSearch与MongoDb结合使用,只需将ElasticSearch用作必须搜索的文档的单独文档存储。是的,你甚至可以作为整个数据库。当然,这取决于您的域模型和其他因素。

如果您不需要词干,模糊搜索,复杂的通配符搜索,您可以使用mongoDb进行搜索。插入新文档时,将其拆分为小写的单词,然后添加到数组“单词”中。稍后您可以使用regex对此阵列执行搜索请求。你不能在这个正则表达式中使用I(忽略大小写)选项,并且你只能搜索LIKE%通配符(或没有通配符),否则搜索将不会使用mongoDb索引。

还有一个选项 - 您可以尝试为mongoDb找到river

另一种选择 - 如果您使用的是Java,则使用Lucene。也许你能够以这种方式扩展Directory类,Lucene将把索引存储在MongoDb而不是文件系统或RAM中。我没有在这方面做过任何研究,但我认为这是可能的

答案 1 :(得分:9)

我在MongoDB中通过分割字符串中的单词来实验全文搜索,就像@Umar建议的那样。老实说,它是一个数据库而不是搜索引擎所以我会将Mongo用于持久存储,而ElasticSearch用于搜索引擎的一部分。事实上,我会坚持使用像Postgresql这样的东西进行持久存储,然后将想要搜索的数据推送到搜索引擎。 http://gdal.org/ogr/drv_elasticsearch.html是一个驱动程序,允许您将数据从一个RDBMS快速导出到ElasticSearch。只要数据是连接到输入源的一种方式,数据就不必是地理空间来使用GDAL。

亚当