【问题标题】:mongodb fulltext searching strategymongodb全文检索策略
【发布时间】:2012-02-29 01:36:59
【问题描述】:

我们正在尝试制定一种策略,在我们的 mongodb 实例上使用 elasticsearch 进行全文搜索。看起来我们想用作过滤器的每个键都必须包含在弹性索引中。我们可能希望使用 mongo 中的每个键作为过滤器 - 即对描述进行全文搜索,按日期和电话号码过滤。有没有人可以分享将全文添加到 mongo 的实际经验?

也许我们可以将elasticsearch用作数据库?

【问题讨论】:

    标签: mongodb elasticsearch


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢 Umar,我们会试试你的方法
    • 虽然这是一个选项,但有一点是数据权重大到足以使正则表达式搜索成为低效的选择。这实际上就是存在搜索索引器的原因。它们补充和增强持久性存储的目的是使昂贵的搜索操作远离数据库。
    • 即使使用正则表达式 mongodDb 也可以使用我在回答中提到的索引,这取决于正则表达式的类型
    【解决方案2】:

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

    亚当

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 2013-01-02
      • 2023-03-23
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      相关资源
      最近更新 更多