当前位置: 首页 > 知识库问答 >
问题:

任何关于regex搜索数亿文本(存储在MongoDB中)的建议

云和同
2023-03-14
    null

搜索的要求如下:

  • 应该能够为(任何)单个或多个字符使用占位符/通配符(如*(.)(.*));
  • 应该能够指示短语在搜索文本中的位置(开头、任意位置、结尾:短语%%短语%%短语);
  • 结果应完全匹配。

我已经试过了:

    null
  • 如果在MongoDB中拥有所有功能并使用它的内置功能,那就太好了;
  • 或使用solr,因为它将用于其他搜索功能,它是可靠的、可伸缩的,等等;
  • 或使用lucene,与solr相同,但必须自己处理可伸缩性、复制和其他问题;
  • 还有其他选择吗?

更新:

我得出的结论是,当前的MongoDB版本无法满足这些需求,因此向solr方向移动了一点。这是我到目前为止所得到的:

    null
<fieldType name="text_keyword_lowercase" class="solr.TextField" positionIncrementGap="100">
 <analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>

共有1个答案

丌官运诚
2023-03-14

你提到:

regex仍然很慢,当搜索的短语不是(^prace)时不使用索引

那么,是否可以强制它始终使用该regex来提高性能呢?
我的意思是,在每个搜索查询开始时插入(^.\*),这样完整的regex看起来像:(^.\*短语)

 类似资料:
  • 我的mongoDB中有这种数据 这里假设我做一个查询 这给了我她的结果,但我有名字“nna”或名字“Ana”或名字“anna”或任何其他组合。那么,如何使用Mongoose获取MongoDB中字符串的最接近值呢

  • 我想知道是否有可能从非谷歌App Engine服务器上使用API搜索存储在谷歌云存储中的文件。

  • 问题内容: 假设mongodb文档(表)“用户”为 我想找到获得“国家奖章”的人,必须在1975年获得该奖。可能会有其他人在不同的年份获得此奖。 如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。 问题答案: 正确的方法是: 允许您在同一数组元素中匹配多个组件。 没有mongo的用户会在1975年代和某些奖项中寻找获得National Medal的用户,但不会寻找1975年获得Nation

  • 假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。

  • 带有Mongoose的MongoDB(3.2.0) 收藏: 用户 null 查询: =>找到 =>找到(搜索大小写敏感为false) =>找到(使用diacriticSensitive搜索为false) =>找到(部分搜索) =>未找到(部分搜索) =>未找到(部分搜索) 你知道为什么我用查询“Leo”或“L”得到0个结果吗? null

  • 我想搜索一个文本文档(或多个文本文档),其中的字符总数可能高达1亿个字符+。 源长度是我正在搜索的文本文件的平均大小。我把它乘以200,得到200个文本文件的平均大小。 那么,如何在不使用这么多RAM的情况下搜索文本文件呢?