【发布时间】:2026-01-27 11:10:01
【问题描述】:
我有一个包含这样的字符串的大文档,基本上是一个非分隔字符串 - 我的名字是约翰史密斯
我还有一个名字集合,这可能非常大,假设有一百万条记录。我打算做什么来检查文档是否包含集合中可用的名称。一种方法是索引文档并遍历集合,并为每个条目在索引中搜索名称。如果集合中没有名称(100 万次迭代),这可能会非常低效。
我想知道是否有更好的方法来做到这一点。像同时索引文档和名称并找到交叉点之类的东西。 谢谢。
【问题讨论】:
-
最好的方法是使用 solr/lucene,imo.,但是看这里:*.com/questions/14633286/…
-
This could be really inefficient in case the names is not there in the collection- 如果您使用正确的索引,可能不会。 -
如果你想自己做,一种方法可能是将文档拆分为单词并构建一些以单词为键的映射(值可能是位置信息等)。然后查找该地图中的名称,如果地图根据初始容量等进行了相应设置,则该名称将接近 O(1)。
-
查找 Aho-Corasick 或 MRSI 算法。
-
@Thomas:我怎么知道在哪里中断,数据没有分隔:(
标签: java indexing lucene pattern-matching