如何处理短语查询和术语分组

时间:2011-06-23 17:04:07

标签: java lucene indexing tokenize

我是Lucene的新手,我的项目是提供专业的搜索 小册子。我正在使用Lucene Java 3.1。

基本思想是帮助人们知道在哪里寻找信息(相反 通过查阅索引来查找与他们的查询匹配的小册子和页码的大型和干燥小册子。我索引中的每个文档都代表其中一本小册子中的特定页面。

到目前为止,我已经能够成功地从小册子中删除原始文本, 将它插入索引,并在两者上使用StandardAnalyzer查询它 结束。

所以这是我的一般问题:
对索引的许多查询将涉及搜索中提到的地名 小册子。一些地名使用符号变体。例如,在正文中 它将在一个页面上被称为“Ship Creek”,但在其他地方的地图中,它可能被列为“Ship Cr”。甚至是“Ship Ck。”。我需要知道的是如何将两个连续的单词作为单个术语处理,并将符号变体添加为同义词。

我的目标当然是搜索任何变种并捕捉所有事件。如果我搜索(Ship AND(Cr Ck Creek))这不能给我我想要的东西,因为[ship]和[cr] / [ck] / [creek]之间可能出现其他单词导致误报。

因此,简而言之,我可能仍然需要StandardAnalyzer提供的基本内容,但是使用特定的术语分组来将地名作为完整术语发出,并可能插入同义词以涵盖变体。

例如,文本“......允许从Ship Creek上游口到......” 导致令牌[允许],[口],[船溪],[上游]。也许通过TokenFilter 顺便说一句,[ship creek]术语会扩展为[ship creek] [ship ck] [ship cr]。

作为奖励,处理棘手的文本会很好。“除了Ship,Bird和 坎贝尔小溪的限制是......“如[除],[船溪],[鸟溪], [坎贝尔克里克],[其中],[限制]。

这似乎是一个非常基本的用例,但我不清楚如何使用Lucene contrib或SOLR的现有组件来实现这一目标。是否应该在某种TokenFilter中进行检测和合并?我是否需要自定义Analyzer实现?

有些术语分组可能是启发式[],[creek]是[ creek] 但如果有帮助,我也会在文中提到一份详尽的地方清单。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用Solr的Synonym Filter.只需设置“creek”即可拥有同义词“ck”,“cr”等。

我不知道任何现有功能可以解决您的“奖金”问题。