Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;“促进”;lucene文档中同一字段的不同实例_Java_Performance_Lucene - Fatal编程技术网

Java &引用;“促进”;lucene文档中同一字段的不同实例

Java &引用;“促进”;lucene文档中同一字段的不同实例,java,performance,lucene,Java,Performance,Lucene,我想使用一个字段来索引文档的标题和正文,以提高性能 我们的想法是这样做: 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

我想使用一个字段来索引文档的标题和正文,以提高性能

我们的想法是这样做:

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的提升

有没有一种方法可以不使用两个不同的字段就得到我想要的?一种方法是在文档中多次添加
标题
字段,这会增加术语频率。这是可行的,但似乎难以置信的脑死亡

我也知道,但对于我所追求的,这似乎是一种过度的杀伤力


有什么想法吗?

如果你想从谷歌的书(至少是他们的旧书)中拿出一页,那么你可能需要创建单独的索引:一个用于文档正文,另一个用于标题。我假设存储了一个字段,该字段指向每个实际文档的真实UID

另一种方法是编写[Similarity][1]的自定义实现,以获得所需的行为。不幸的是,我发现Lucene经常需要这种定制,因此出现了一些独特的问题


[1] :,int)

您可以单独索引标题和正文,标题字段由所需的值提升。然后,可以使用搜索多个字段


从技术上讲,搜索多个字段需要更长的时间,通常即使有这样的开销,Lucene的速度也会非常快(大约几十毫秒或几百毫秒)。

您能详细介绍一下您试图克服的性能问题吗?我从来没有在两个单独的字段上使用BooleanQuery遇到过问题。我还没有测试过它,但我很确定搜索
(标题:bravo或正文:bravo)需要更长的时间
而不是
text:bravo
只是想到了另一个原因,您可能希望将这些数据元素保留在单独的字段或单独的索引中:如果它们在同一索引中共享相同的字段名称,正文中的大量内容可能会破坏标题的术语频率。菜单、表格或主页(如果您使用的是基本网页)等词将开始更频繁地出现,从而减少这些词在标题中的权重。