Lucene:具有相同名称的多个StringFields - 查询仅匹配最后一个

时间:2014-06-30 19:49:04

标签: java scala lucene

我有一个包含多个具有相同名称的StringField的Lucene文档,如下所示:

doc.add(new StringField("uri", "http://www.doesn-t-work.com/foo", Field.Store.YES))
doc.add(new StringField("uri", "http://www.doesn-t-work.com/baz", Field.Store.YES))
doc.add(new StringField("uri", "http://www.this-works.com/bar", Field.Store.YES))

我使用StandardAnalyzer将Document写入索引,但就我的理解而言,这并不重要,因为我使用的是StringField:

new IndexWriter(placeIndex, new IndexWriterConfig(Version.LUCENE_48, new StandardAnalyzer(Version.LUCENE_48)))

我想要做的事情(显然)是运行一个查询,我可以在其中搜索URI字段的任何值,然后返回文档。但是当我查询最后添加到文档的URI值时,我只得到一个结果。查询任何其他字段值(即'不工作')返回零点击。

我使用的查询是:

new TermQuery(new Term("uri", "http://www.doesn-t-work.com/foo")) // 0 hits

new TermQuery(new Term("uri", "http://www.this-works.com/bar")) // 1 hit

附加注意:当我通过查询最后一个URI获取文档时,我绝对可以验证是否存储了所有三个URI值。它只是似乎被覆盖的索引......(或者我错误地解释了多值StringFields如何/如果有效)。

任何提示都非常赞赏!

1 个答案:

答案 0 :(得分:1)

哎呀 - 事实证明这是另一个问题引起的。我分别测试了这个场景,它以上述方式完美地运行。

然而,在我的应用程序中,我在索引之间逐个添加不同的URI。即我添加了一个URI,将Document写入索引。之后,我将检索文档,添加另一个URI,将其写回,等等。

简而言之,事实证明重新使用Documents是一个问题:当我从头创建一个带有多个URI字段的新Document实例时,一切都进展顺利。

当天的课程,我想:不要重复使用您的Lucene文档。