簡體   English   中英

在Lucene文檔中“提升”同一字段的不同實例

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM