ApacheLucene:在字符串之间创建索引并进行智能搜索
我的问题如下:假设我有三个文件。A、 这些文件中的每一个都包含100-150M字符串(每行一个)。每个字符串的格式为分层路径,如/e/d/f。例如:ApacheLucene:在字符串之间创建索引并进行智能搜索,lucene,Lucene,我的问题如下:假设我有三个文件。A、 这些文件中的每一个都包含100-150M字符串(每行一个)。每个字符串的格式为分层路径,如/e/d/f。例如: File A (RTL): /arbiter/par0/unit1/sigA /arbiter/par0/unit1/sigB ... /arbiter/par0/unit2/sigA File B (SCH) /arbiter_sch/par0/unit1/sigA /arbiter_sch/par0/unit1/sigB ... /arbit
File A (RTL):
/arbiter/par0/unit1/sigA
/arbiter/par0/unit1/sigB
...
/arbiter/par0/unit2/sigA
File B (SCH)
/arbiter_sch/par0/unit1/sigA
/arbiter_sch/par0/unit1/sigB
...
/arbiter_sch/par0/unit2/sigA
File C (Layout)
/top/arbiter/par0/unit1/sigA
/top/arbiter/par0/unit1/sigB
...
/top/arbiter/par0/unit2/sigA
我们可以在硬件建模语言中考虑对应于电路信号的文件。与原理图网络表中的电路信号相对应的文件B。与布局中的电路信号相对应的文件C(用于制造)
现在,信号将在文件a、文件B和文件C之间有一个映射。例如,在本例中,/arbiter/par0/unit1/sigA==/arbiter\u sch/par0/unit1/sigA==/top/arbiter/par0/unit1/sigA。当然,这种关联(等价性)是由我建立的,我不希望匹配者帮我解决这个问题
现在,我给“/arbiter/par0/unit1/sigA”。在这种情况下,匹配器应该从文件a返回一个直接匹配,因为找到了它。对于B/C文件,无法直接匹配。因此,它应该返回最佳匹配(即编辑距离?),因此在本例中,它可以从文件B中给出/arbiter_sch/par0/unit1/sigA,从文件C中给出/top/arbiter/par0/unit1/sigA
我也可以给出类似*par0*unit1*sigA的东西,而不是给出一个完整的字符串搜索,它应该会给出fileA/B/C中所有可能的匹配项
我正在寻找解决方案,遇到了ApacheLucene。然而,我不能完全肯定这是否有效。我正在浏览这些文件,想了解一些情况
我的主要要求如下:
有人能告诉我Lucene是否可以轻松解决这样的用例吗?建立索引和进行快速/快速搜索的正确方法是什么?我想写一些概念验证代码并测试性能。谢谢。我认为根据您的要求,最好的解决方案是一个带有给定测试项集的PoC。基于此,应该可以评估您想要达到的目标索引时间。因为您只使用静态信息,所以更容易,因为您不必关心诸如NRT(近实时搜索)之类的主题 就我个人而言,我从未使用lucene处理过如此大的信息集,但我认为lucene能够处理这个问题 我会怎么做:
- 阅读有关lucene、索引、搜索的教程和最佳实践,了解其工作原理
- 为索引定义一个数据集,比如说每个文件有1000行
- 定义您的lucene文档结构
- 编写简单索引的代码
- 编写简单搜索的代码
试着构造你的代码。单独的索引和搜索->这将更容易重构。你能举个例子,比如你想搜索什么以及预期的搜索结果是什么吗?为了正确理解:a/b/c与a、b和c无关,对吧?谢谢你的回复。我重新措辞了原来的帖子,以便更清晰。希望这有帮助。所以这些文件将被索引一次?然后你喜欢搜索东西?没有因为文件的更改而重新索引或临时索引?是的,您是正确的。这些文件将只编制一次索引。内容是静态的。一旦冻结就无法更改。谢谢您的帮助。我会尝试一下,看看效果如何。当然。如果您遇到任何问题,请发表评论,我们可以在聊天中讨论。