bla*_*box 13 java lucene information-retrieval
我目前正在使用lucene索引网页.目的是能够快速提取哪个页面包含某个表达式(通常为1,2或3个单词),以及其他单词(或其中1到3个组)也在页面中.这将用于构建/丰富/改变同义词库(固定词汇表).
从我发现的文章来看,问题似乎是找到n-gram(或shingle).
Lucene的有ShingleFilter,一个ShingleMatrixFilter和ShingleAnalyzerWrapper,这似乎与此相关的任务.
从这个演示文稿中,我了解到Lucene还可以搜索由固定数量的单词(称为slops)分隔的术语.这里提供了一个例子.
但是,我不明白这些方法之间的区别?它们是根本不同的,还是您必须做出的性能/索引大小选择?
ShingleMatrixFilter和ShingleFilter有什么区别?
希望Lucene大师能找到这个问题,然后回答;-)!
Rob*_*uir 17
使用短语与木瓦之间的差异主要涉及表现和得分.
当在单个单词在索引中的典型情况下使用短语查询(比如说"foo bar")时,短语查询必须遍历"foo"和"bar"的反向索引并找到包含这两个词的文档,然后在每个文档中查看他们的位置列表,找到"foo"出现在"bar"之前的地方.
这对性能和评分都有一些成本:
另一方面,如果你使用带状疱疹,你也可以为单词n-gram编制索引,换句话说,如果你的大小为2,你也会在索引中使用"foo bar"这样的术语.这意味着对于这个短语查询,它将被解析为一个简单的TermQuery,而不使用任何位置列表.而且由于它现在是一个"真正的术语",IDF这个短语将是准确的,因为我们确切知道这个"术语"存在多少文件.
但使用带状疱疹也有一些成本:
一般来说,使用Shingles或CommonGrams之类的索引word-ngrams只是权衡(相当专业),以降低位置查询的成本或增强短语评分.
但是这些东西有真实的用例,这里有一个很好的例子:http: //www.hathitrust.org/blogs/large-scale-search/slow-queries-and-common-words-part-2