ApacheLucene:在字符串之间创建索引并进行智能搜索

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

我的问题如下:假设我有三个文件。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
...
/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。然而,我不能完全肯定这是否有效。我正在浏览这些文件,想了解一些情况

我的主要要求如下:

  • 将有3个带有信号完整路径的文本文件。(如果有助于更快地构建索引器,我可以调整格式使其更紧凑)

  • 建立索引应该相当快(需要几个小时)。上面的文件是静态的(没有修改)

  • 搜索应该是全面的。如果需要~1s/搜索,则可以,但匹配应支持直接匹配、正则表达式匹配和编辑距离匹配。主要的挑战是每个文件可以有1-1.5亿个信号


  • 有人能告诉我Lucene是否可以轻松解决这样的用例吗?建立索引和进行快速/快速搜索的正确方法是什么?我想写一些概念验证代码并测试性能。谢谢。

    我认为根据您的要求,最好的解决方案是一个带有给定测试项集的PoC。基于此,应该可以评估您想要达到的目标索引时间。因为您只使用静态信息,所以更容易,因为您不必关心诸如NRT(近实时搜索)之类的主题

    就我个人而言,我从未使用lucene处理过如此大的信息集,但我认为lucene能够处理这个问题

    我会怎么做:

    • 阅读有关lucene、索引、搜索的教程和最佳实践,了解其工作原理
    • 为索引定义一个数据集,比如说每个文件有1000行
    • 定义您的lucene文档结构
    这一点非常重要,因为基于此,您将应用 搜索。如果需要的话,注意像托卡尼化这样的分析仪任务 以及如何。如果需要全文搜索,请注意文本字段

    • 编写简单索引的代码
    使用索引运行小测试,并使用

    • 编写简单搜索的代码
    定义查询和预期结果。执行搜索和检查 结果


    试着构造你的代码。单独的索引和搜索->这将更容易重构。

    你能举个例子,比如你想搜索什么以及预期的搜索结果是什么吗?为了正确理解:a/b/c与a、b和c无关,对吧?谢谢你的回复。我重新措辞了原来的帖子,以便更清晰。希望这有帮助。所以这些文件将被索引一次?然后你喜欢搜索东西?没有因为文件的更改而重新索引或临时索引?是的,您是正确的。这些文件将只编制一次索引。内容是静态的。一旦冻结就无法更改。谢谢您的帮助。我会尝试一下,看看效果如何。当然。如果您遇到任何问题,请发表评论,我们可以在聊天中讨论。