【发布时间】:2014-06-30 19:49:04
【问题描述】:
我有一个包含多个同名字符串字段的 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 值进行查询时,我只会得到一个结果。使用任何其他字段值(即“doesn-t-work”值)进行查询返回零命中。
我正在使用的查询是这样的:
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如何/如果工作)。
非常感谢任何提示!
【问题讨论】: