我有一个包含多个具有相同名称的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如何/如果有效)。
任何提示都非常赞赏!
答案 0 :(得分:1)
然而,在我的应用程序中,我在索引之间逐个添加不同的URI。即我添加了一个URI,将Document写入索引。之后,我将检索文档,添加另一个URI,将其写回,等等。
简而言之,事实证明重新使用Documents是一个问题:当我从头创建一个带有多个URI字段的新Document实例时,一切都进展顺利。
当天的课程,我想:不要重复使用您的Lucene文档。