[英]“boosting” different instances of the same field in a lucene document
我想使用一个字段来索引文档的标题和正文,以提高性能。
想法是做这样的事情:
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
。
但是,事实证明,字段提升是文档中相同名称的所有字段提升的倍数 。 在我的情况下,这意味着两个字段都提高了3。
有没有一种方法可以使我不需使用两个不同的字段就能得到我想要的东西? 一种方法是将title
字段多次添加到文档中,这会增加术语频率。 这可行,但似乎令人难以置信。
我也知道有效载荷 ,但这似乎对我追求的目标来说是一个过大的杀伤力。
有任何想法吗?
如果要从Google的书(至少是他们的旧书)中取出一页,则可能要创建单独的索引:一个用于文档正文,另一个用于标题。 我假设存储的字段指向每个实际文档的真实UID。
替代方法是编写[Similarity] [1]的自定义实现,以获取所需的行为。 不幸的是,我发现Lucene经常需要这种定制,从而产生了独特的问题。
[1]: http : //lucene.apache.org/java/3_0_2/api/all/org/apache/lucene/search/Similarity.html#lengthNorm(java.lang.String ,int)
您可以将标题和正文分别编入索引,标题字段增加所需的值。 然后,您可以使用MultiFieldQueryParser搜索多个字段。
从技术上讲,搜索多个字段会花费较长的时间,通常即使有此开销,Lucene也会非常快(几十或几百毫秒的量级)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.