2012-02-07 87 views
12

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

也许我们可以使用elasticsearch作为db?

回答

14

我看不出有什么理由将ElasticSearch与MongoDb结合使用,只是使用ElasticSearch作为文档的单独文档存储,必须进行搜索。是的,你甚至可以作为整个分贝。当然这取决于你的领域模型和其他因素。

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

还有一个选择 - 你可以尝试找到river MongoDB的

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

+0

感谢奥马尔,我们打算给你approcah试试 – stew 2012-02-08 13:15:46

+0

虽然这是一个选项,有那么一刻,数据的权重足够大,使正则表达式搜索的效率低下的选择。这就是为什么搜索索引器存在的原因。它们补充并增强了持久性存储,以便将昂贵的搜索操作从数据库中删除。 – 2013-03-06 17:18:04

+0

即使有正则表达式mongodDb可以使用索引,正如我在答案中所述,它取决于正则表达式的类型 – Anton 2013-06-25 19:24:45

9

我尝试在MongoDB中进行全文搜索,将@Umar建议的字符串分开。老实说,它是一个数据库,而不是一个搜索引擎,所以我会使用Mongo来实现持久性存储,并使用ElasticSearch作为搜索引擎的一部分。事实上,我会坚持使用像Postgresql这样的持久存储,然后将要搜索的数据推送到搜索引擎。 http://gdal.org/ogr/drv_elasticsearch.html是一款驱动程序,可让您将数据从一个RDBMS快速导出到ElasticSearch。只要数据是连接输入源的方式,数据就不必是地理空间数据以便使用GDAL。

亚当