我想使用单个字段来索引文档的标题和正文,以提高性能。
这个想法是做这样的事情:
Field title = new Field("text", "alpha bravo charlie", Field.Store.NO, Field.Index.ANALYZED);
title.setBoost(3)
Field body = new Field("text", "delta echo foxtrot", Field.Store.NO, Field.Index.ANALYZED);
Document doc = new Document();
doc.add(title);
doc.add(body);
然后我可以为两个单独的字段执行单个TermQuery
而不是BooleanQuery
。
然而,事实证明,字段提升是文档中同名字段的所有增强的multiple。在我的例子中,这意味着两个字段的提升均为3。
有没有办法可以获得我想要的东西,而不需要使用两个不同的字段?一种方法是将title
字段多次添加到文档中,这会增加术语频率。这很有效,但似乎非常难以置信。
我也知道payloads,但这似乎对我所追求的事情有点过分。
有什么想法吗?
答案 0 :(得分:0)
如果你想从Google的书中取出一页(至少是他们的旧书),那么你可能想要创建单独的索引:一个用于文档主体,另一个用于标题。我假设存储了一个字段,指向每个实际文档的真实UID。
另一个答案是编写[Similarity] [1]的自定义实现来获得您想要的行为。不幸的是,我发现Lucene经常需要这种定制出现的独特问题。
答案 1 :(得分:0)
您可以使用所需值提升的标题字段对标题和正文进行索引。然后,您可以使用MultiFieldQueryParser搜索多个字段。
虽然从技术上讲,搜索多个字段需要更长的时间,通常即使有这种开销,Lucene也会非常快(大约几十或几百毫秒)。