Lucene 搜索引擎如何执行精确的短语搜索?

Lucene 搜索引擎如何执行精确的短语搜索?,lucene,search-engine,Lucene,Search Engine,我正在使用Lucene在数据集中搜索,我现在需要知道“”搜索(我指的是精确短语搜索)机制是如何实现的 我想让它能够在用户输入“littlecat”时生成所有“littlecat”点击。我现在应该操作索引代码,但至少我现在应该知道“”搜索的工作原理。我想让它能够在用户输入“littlecat”时生成所有“littlecat”点击结果 这听起来可能很容易,但很难实现。对于人类来说,“小”和“猫”是两个不同的词,但对于计算机来说,它无法将“小”和“猫”与“小”区分开来,除非您有一本词典,并且您的代码在

我正在使用Lucene在数据集中搜索,我现在需要知道“”搜索(我指的是精确短语搜索)机制是如何实现的

我想让它能够在用户输入“littlecat”时生成所有“littlecat”点击。我现在应该操作索引代码,但至少我现在应该知道“”搜索的工作原理。

我想让它能够在用户输入“littlecat”时生成所有“littlecat”点击结果


这听起来可能很容易,但很难实现。对于人类来说,“小”和“猫”是两个不同的词,但对于计算机来说,它无法将“小”和“猫”与“小”区分开来,除非您有一本词典,并且您的代码在词典中检查这两个词。另一方面,搜索“小猫”也可以轻松地搜索“小猫咪”。我相信这超出了精确短语搜索的概念。精确短语搜索仅在搜索“littlecat”时返回littlecat,反之亦然。即使谷歌似乎(也期望如此)在littlecat搜索中也不会返回“little cat”

实现这一点的方法是动态编程(Dynamic programming)——使用字典/语料库来比较您的单个单词(以及将文本解析成字符串后留下的单词)

把它想象成你在写一个自定义的拼写检查器或者类似的东西。在这种情况下,还有一种情况是,可能会留下一个以上的单词组合,例如-“walkingmydoginrain”-在这里,你可以将第一个单词改为“walk”或“walking”,这就是DP的美妙之处-因为你知道(从你的语料库中)你不能从“ingmydoginrain”(即字符串的其余部分-您刚刚发现在本上下文中-您应该选择分段单词作为“Walking”,而不是Walking

也可以这样想,无法找到匹配项会添加到您定义的成本函数中,因此您应该获得最佳结果-这意味着您可以确保您的文本(不以空格分隔)一定会被分解为合法的单词-尽管该行中可能有多个可能的单词序列(因此,可能也是寻求这一点的人的意图)

您应该能够在web上为您的用例找到相当好的基本实现(另请阅读:Google是如何实现的?“您的意思是什么”)

现在,请参见-