Java 在非分隔字符串中搜索特定单词

Java 在非分隔字符串中搜索特定单词,java,indexing,lucene,pattern-matching,Java,Indexing,Lucene,Pattern Matching,我有一个包含如下字符串的大型文档,基本上是一个非分隔字符串- 我的名字是约翰史密斯 我还收集了一些名字,这可能非常大,假设有一百万条记录。我打算做什么来检查文档是否包含集合中可用的名称。一种方法是为文档编制索引并遍历集合,然后为每个条目搜索名称索引。如果集合中没有名称(100万次迭代),这可能会非常低效 我想知道是否有更好的方法。类似于为文档和名称编制索引并查找交叉点。 谢谢 字符串搜索算法使用有限状态机在文档中同时搜索大量字符串。该算法的复杂性与字符串长度加上搜索文本长度加上输出匹配数成线性关

我有一个包含如下字符串的大型文档,基本上是一个非分隔字符串- 我的名字是约翰史密斯

我还收集了一些名字,这可能非常大,假设有一百万条记录。我打算做什么来检查文档是否包含集合中可用的名称。一种方法是为文档编制索引并遍历集合,然后为每个条目搜索名称索引。如果集合中没有名称(100万次迭代),这可能会非常低效

我想知道是否有更好的方法。类似于为文档和名称编制索引并查找交叉点。
谢谢

字符串搜索算法使用有限状态机在文档中同时搜索大量字符串。该算法的复杂性与字符串长度加上搜索文本长度加上输出匹配数成线性关系。这就是病毒扫描软件如何能够在合理的时间内有效地搜索文件中的大量病毒特征。

最好的方法是使用solr/lucene,imo。,但请看这里:
如果集合中没有名称,这可能会非常低效
——如果使用正确的索引,可能不会。如果您想自己这样做,一种方法可能是将文档拆分为单词,并构建一些以单词为键的地图(值可能是位置信息等)。然后在地图中查找接近O(1)的名称,如果地图根据初始容量等进行相应设置。查找Aho Corasick或MRSI算法。@Thomas:我如何知道在哪里中断,数据是非分隔的:(