2013-08-01 54 views
1

我有一個包含多值字段的Solr模式。我正在從外部解析Solr並使用http://wiki.apache.org/solr/UpdateJSON更新索引(另請參閱http://wiki.apache.org/solr/UpdateXmlMessages)。下面是一個玩具示例,演示了我試圖解決的問題。在Solr更新中指定多值詞頻率?

{ 
    "add": { 
    "doc": { 
     "id": "MyDocumentID", 
     "user": "MyUserID", 
     "meals": ["pizza", "pizza", "pizza", "burger"] 
    } 
    } 
} 

,我希望能找到某種語法,讓我表示,「披薩」出現3次,實際上並沒有寫出來的3倍。問題是這些頻率中的一些頻率可能在幾千或幾萬。 (我正在使用存儲的術語頻率來過濾和排列搜索結果。)這樣的語法是否存在?我正在做這件事,但是這裏有一個這樣想象的例子。

{ 
    "add": { 
    "doc": { 
     "id": "MyDocumentID", 
     "user": "MyUserID", 
     "meals": ["pizza"*3, "burger"] 
    } 
    } 
} 

我懷疑答案是,如果我想要這樣的行爲,我需要自己編寫一些Solr代碼。我希望避免這種情況,但如果是這種情況,您仍然可以通過指向我要開發的代碼的正確區域來幫助我。

這裏有一個相關的Lucene的問題:Can I insert a Document into Lucene without generating a TokenStream?

+0

您使用的是什麼Solr版本? – jmend

+1

對於Solr 4.4,您可能需要從[JsonLoader]開始(http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/core/src/java/org/apache/solr /handler/loader/JsonLoader.java),這裏是你的更新消息被解析的地方(查看parseDoc()和parseSingleFieldValue())。希望這可以幫助。 – jmend

+0

我正在使用版本4.4.0。 –

回答

0

如果你願意來解析JSON創建XML,有可能是一個解決辦法:

<add> 
<doc> 
    <field name="employeeId">05991</field> 
    <field name="skills" update="set">Python</field> 
    <field name="skills" update="set">Python</field> 
    <field name="skills" update="set">Python</field> 
    <field name="skills" update="set">Java</field> 
</doc> 
</add> 

而應該能夠使用這個(注意技巧是一個多值字段):

<add> 
<doc> 
    <field name="employeeId">05991</field> 
    <field name="skills" update="set" boost="3.0">Python</field> 
    <field name="skills" update="set">Java</field> 
</doc> 
</add> 

這是從solr wiki

免責聲明:我沒有在一個字段中使用多個可選屬性,也沒有看到任何示例這樣做。

+0

不錯的想法,但我嘗試了這一點,它並沒有真正改變術語頻率(如通過向查詢添加debug = true所示)。事實上,它甚至不會做你會想到的事情,並提高結果。我認爲後一個問題與Solr沒有正確支持多值字段上的粒度提升有關。但這是我原來的問題的一種轉移。 –

+0

順便說一句,如果你想知道爲什麼我關心改變TF而不是提高排名,那麼我可以指定一個[fq](http://wiki.apache.org/solr/CommonQueryParameters#fq ) 零件。 –